与ARC的@属性定义:强或保留?

使用Xcode 4.2和ARC,我注意到NSManagedObject的自动生成的代码仍然读取像这样的属性:

 @property (nonatomic, retain) NSString * someString; 

1)现在不应该retain weak吗?

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

3)什么是在这个财产声明retain正确的替代?

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

1)现在不应该保留强弱吗?

不可以,你不能用弱来取代保留; 他们是不同的。 而强者是保留的100%同义词; 他们是相同的。 你可以使用,所以这里没有“应该”。 如果你愿意的话,你可以用强壮的替代保留,但是你不需要。

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

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

3)什么是在这个财产声明保留正确的替代?

没有必要取代保留。

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

事实并非如此。

为了回答这三个问题: retainstrong是彼此的同义词,所以两者都是正确的。 文档说明

retain意味着__strong所有权

strong意味着__strong所有权

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

“保留”等于“强”。

例如:使用“strong”

 @property (nonatomic, strong) NSString * someString; 

例如:“__strong”

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

在苹果文件。 说:

属性属性

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

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

苹果文档。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html