ARC的@property定义:强还是保留?

时间:2011-10-17 16:08:48

标签: objective-c properties automatic-ref-counting nsmanagedobject retain

使用Xcode 4.2和ARC,我注意到NSManagedObject的自动生成代码对于属性仍然如此:

@property (nonatomic, retain) NSString * someString;

1)retainstrong现在不应该替换weak吗?

2)为什么自动生成的代码仍然使用retain

3)此属性声明中retain的正确替换是什么?

我正在使用NSFetchRequest调试问题,我认为这可能是问题的根源。思考?

4 个答案:

答案 0 :(得分:110)

  

1)现在不应该保留被强或弱的替换?

没有。你不能用弱者代替保留;它们是不同的。而强者是保留的100%同义词;他们是相同的。你可以使用其中之一,所以这里没有“应该”。如果您愿意,可以使用strong替换retain,但是您不需要。

  

2)为什么自动生成的代码仍然使用retain

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

  

3)在此属性声明中保留的正确替换是什么?

无需替换保留。

  

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

不是。

答案 1 :(得分:40)

要回答所有三个问题:retainstrong是彼此的同义词,因此两者都是正确的。 The documentation个州

  

retain隐含__strong所有权

     

strong隐含__strong所有权

答案 2 :(得分:4)

在ARC之前,您必须“释放”保留的对象。这意味着保留有反对意见。在ARC之后,您不需要发布。所以要坚强。它是一个你不需要调用释放的视觉线索。

答案 3 :(得分:3)

“保留”等于“强”。

“strong”用于举例:

@property (nonatomic, strong) NSString * someString;

例如使用“__strong”:

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

在Apple Docs上。表示:

属性属性

关键字weak和strong被引入为新声明的属性属性,如以下示例所示。

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

Apple doc。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html