与ARC的@属性定义:强或保留?
使用Xcode 4.2和ARC,我注意到NSManagedObject
的自动生成的代码仍然读取像这样的属性:
@property (nonatomic, retain) NSString * someString;
1)现在不应该retain
weak
吗?
2)为什么自动生成的代码仍然使用retain
3)什么是在这个财产声明retain
正确的替代?
我目前正在使用NSFetchRequest
debugging一个问题,我认为这可能是问题的根源。 思考?
1)现在不应该保留强弱吗?
不可以,你不能用弱来取代保留; 他们是不同的。 而强者是保留的100%同义词; 他们是相同的。 你可以使用,所以这里没有“应该”。 如果你愿意的话,你可以用强壮的替代保留,但是你不需要。
2)为什么自动生成的代码仍然使用保留
为什么不? 参见(1)。 保留是正确的,所以没有问题。
3)什么是在这个财产声明保留正确的替代?
没有必要取代保留。
我目前正在使用NSFetchRequestdebugging一个问题,我认为这可能是问题的根源。 思考?
事实并非如此。
为了回答这三个问题: retain
和strong
是彼此的同义词,所以两者都是正确的。 文档说明
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;