关于C#:使用ARC的@property定义:强还是保留?

@property definitions with ARC: strong or retain?

使用xcode 4.2和arc,我注意到为NSManagedObject自动生成的代码对于属性仍然是这样的:

1
@property (nonatomic, retain) NSString * someString;

1)现在不应该用strongweak代替retain

2)为什么自动生成的代码仍然使用EDOCX1[1]

3)在本财产声明中,对retain的正确替换是什么?

我目前正在使用NSFetchRequest调试一个问题,我认为这可能是问题的根源。思想?


1) Shouldn't retain now be replace with strong or weak?

不,你不能用弱的代替保留,它们是不同的。强是retain的100%同义词;它们是相同的。你也可以用,所以这里没有"应该"这个词。如果你愿意的话,你可以用强韧的来代替RETAIN,但是你不必这样做。

2) Why does the auto-generated code still use retain

为什么不呢?见(1)。保留是正确的,所以没有问题。

3) What is the correct replacement for retain in this property statement?

不需要更换RETAIN。

I'm currently debugging a problem using NSFetchRequest, and I thought this might be the source of the problem. Thoughts?

不是这样。


回答这三个问题:retainstrong是同义词,所以两者都是正确的。文件规定

retain implies __strong ownership

strong implies __strong ownership


在ARC之前,您必须"释放"保留的对象。这意味着保留有相反的部分。弧后不需要释放。所以要坚强。这是一个直观的线索,你不需要调用释放。


"保留"等于"强"。

例如,"strong"用于:

1
@property (nonatomic, strong) NSString * someString;

例如,使用"uu strong"表示:

1
2
3
4
-(void) someMethod
{
    __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"];
}

关于苹果文档。说:

属性

弱和强关键字作为新的声明属性引入,如下面的示例所示。

1
2
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
property(strong) MyClass *myObject;

苹果博士http://developer.apple.com/library/ios/releasenotes/obiodic/rn transitioningtoarc/introduction/introduction.html