copy vs strong properties
我在iOS方面比较新鲜,我想知道我们什么时候应该在一个物业中使用copy,例如。
1
| @property (nonatomic, retain) NSString* name; |
VS
1
| @property (nonatomic, copy) NSString* name;` |
retain和copy有什么区别,我什么时候应该使用一个而不是另一个?
- 通常,我对nsstring、array和其他变量等对象使用retain。但是当我使用uiview的出口,或者任何一个uiviewcontroller的实例时,我会使用强大的。否则我真的不知道有什么区别。
- @arpitparekh strong==retain:stackoverflow.com/questions/7796476/…
- 但是,当我将uiviewcontroller作为变量时,我需要将其指定为强适当的,如果我将其设置为保留,那么我的应用程序将崩溃……此链接支持此功能。添加为子视图stackoverflow.com/questions/9144959/…
- @arpitparekh retain不再用于弧。你应该把它换成strong。
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〕的部门。所以在这种情况下,最好有副本。
如果NSString是mutable那么它得到copied。如果不是,那么它就是retained。如果您将使用copy,那么将为字符串创建一个新的副本,从而也会产生不同的内存地址。但是,如果您使用retain,那么它将在相同的内存地址中,只有保留计数器才会更改。
- 当你说如果我nsstring物业在物业使用保留和使用当我在nsmutablestring我需要使用复制的权利吗?
- nsstring mutable是永远的。因此需要nsmutablestring…