使用Xcode 4.2和ARC,我注意到NSManagedObject
的自动生成代码对于属性仍然如此:
@property (nonatomic, retain) NSString * someString;
1)retain
或strong
现在不应该替换weak
吗?
2)为什么自动生成的代码仍然使用retain
3)此属性声明中retain
的正确替换是什么?
我正在使用NSFetchRequest
调试问题,我认为这可能是问题的根源。思考?
答案 0 :(得分:110)
1)现在不应该保留被强或弱的替换?
没有。你不能用弱者代替保留;它们是不同的。而强者是保留的100%同义词;他们是相同的。你可以使用其中之一,所以这里没有“应该”。如果您愿意,可以使用strong替换retain,但是您不需要。
2)为什么自动生成的代码仍然使用retain
为什么不呢?见(1)。保留是正确的,所以没有问题。
3)在此属性声明中保留的正确替换是什么?
无需替换保留。
我目前正在使用NSFetchRequest调试问题,我认为这可能是问题的根源。想法?
不是。
答案 1 :(得分:40)
要回答所有三个问题:retain
和strong
是彼此的同义词,因此两者都是正确的。 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;