使用@property(copy)与@property(retain)的经验法则是什么?

Jam*_*sev 4 memory-management objective-c

在确定ObjectiveC中的给定属性是否应该是a retain或者copy?时,我想知道你是否遵循经验法则?

你如何决定它应该是什么?

jtb*_*des 10

通常,您可以使用copy具有可变变体的类来安全,例如NSString,NSArray其他集合类等.要了解原因,请考虑此处发生的情况......

很久以前,

@interface MyClass : NSObject
@property (retain) NSString *happyString;
- (void)rejoice;
@end
Run Code Online (Sandbox Code Playgroud)

后来有一天,

- (void)bigBadMethod {
    MyClass *myObject = [[[MyClass alloc] init] autorelease];
    NSMutableString *theString = [NSMutableString stringWithString:@"I'm happy!"];
    myObject.happyString = theString; // this is allowed because NSMutableString inherits from NSString
    [myObject rejoice]; // prints "I'm happy!"
Run Code Online (Sandbox Code Playgroud)

突然间就...

    [theString setString:@"BRAAAAIIINNNSSSSS"];
    [myObject rejoice]; // prints "BRAAAAIIINNNSSSSS"
}
Run Code Online (Sandbox Code Playgroud)

你不会想要的,是吗?所以,@property (copy)如果你不想在你不看的时候变异,请使用!