首先用copy可能是深復制照藻,也可能是淺復制袜啃,淺復制不會產(chǎn)生新的對象,和strong的效果相同岩梳。
舉個栗子:
有一個Person對象囊骤,這個對象有個屬性:name
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@end
這個時候我們要對這個name賦值:(這時有兩種情況)
①
Person *person = [Person new];
NSMutableString *nameStr = [[NSMutableString alloc] init];
nameStr.string = @"ZhangSan";
person.name = nameStr;
這個時候我們可以修改nameStr這個對象:
[nameStr appendString:@"加點文字"];
此時,如果person的name屬性不是用copy而是strong冀值,那么這個時候person的name屬性就會隨著nameStr的值的改變而改變(想想一個人的名字怎么能隨便改變呢)也物,這顯然破壞了封裝性(在這里copy是深復制),person對象怎么可以在自己不知道的情況下列疗,自己的name屬性被修改呢滑蚯。
②
Person *person = [Person new];
NSString *nameStr = @"LiSi";
person.name = nameStr;
這個時候不管用strong或者copy效果都是相同的,因為nameStr是不可變字符串抵栈,如果用copy也不會產(chǎn)生新的對象(這里是淺復制)告材,既然是不可變字符串,當然也是不能修改的古劲!這個時候和strong一樣都只是引用計數(shù)器+1斥赋。