1.为什么声明某些属性时候,一般用copy,而不用strong
@interfaceCar : NSObject
@property (nonatomic,copy) NSString* name;
@property (nonatomic,copy) NSArray *array;
@end
对于具有可变副本的属性我们一般声明为copy
比如说,上述name的属性为copy,假设此时有人创建了一个Car的对象,并且把这个属性赋给了一个NSMutableString的值,但是如果这个值发生变化,而我们声明的属性用copy而不用Strong的话,随着可变字符串的变化,person对象也将发生变化,而这并不是我们想要看到的,对于类似字典和数组,大抵也是这种情况。即:
NSMutableString *someName = [[NSMutableString alloc]initwithString:@"Terry"]
NSMutableArray *someArray = [[NSMutableArrayalloc]initWithObjects:@1,@2,@3,nil];
Car *car = [[Car alloc]init]
car.name = someName;
car.array = someArray
[someName setString:@"Tod"]
[someArray removeoobjectAtIndex:0];
如果声明属性为copy值car.name 为Terry,如果是Strong,car.name 为Tod
同样如果数组属性为copy car.array为1,2,3,否则为2,3;
即 属性为copy时我们用car.array = someArray会生成不可变的copy,并不会随着someArray的变化而变化。