关于ios:复制vs强大的属性

copy vs strong properties

本问题已经有最佳答案,请猛点这里访问。

我在iOS方面比较新鲜,我想知道我们什么时候应该在一个物业中使用copy,例如。

1
@property (nonatomic, retain) NSString* name;

VS

1
@property (nonatomic, copy) NSString* name;`

retaincopy有什么区别,我什么时候应该使用一个而不是另一个?


1
@property (nonatomic, copy) NSString* name;

更好,因为NSString是不变的,它的子类NSMutableString是可变的。

只要你一直使用NSString,你就不会看到任何不同。但当你开始使用NSMutableString时,情况可能会变得不那么乐观。

1
2
3
4
5
6
7
8
NSMutableString *department = [[NSMutableString alloc] initWithString:@"Maths"];

Person *p1 = [Person new];
p1.department = department;

//Here If I play with department then it's not going to affect p1 as the property was copy
//e.g.
[department appendString:@"You're in English dept."];

如果它被保留下来的话,它将改变江户十一〔10〕的部门。所以在这种情况下,最好有副本。


如果NSStringmutable那么它得到copied。如果不是,那么它就是retained。如果您将使用copy,那么将为字符串创建一个新的副本,从而也会产生不同的内存地址。但是,如果您使用retain,那么它将在相同的内存地址中,只有保留计数器才会更改。