1.NSString使用strong修饰的问题。
可变字符串使用copy和strong
@interface GrayView : UIView
@property(nonatomic,strong) NSMutableString * name;
//@property(nonatomic,copy) NSMutableString * name;
@end
NSMutableString * nameStr=[[NSMutableString alloc]initWithString:@"test"];
self.testview.name=nameStr;
[nameStr appendString:@"-view"];
NSLog(@"%p:%@-%p:%@",nameStr,nameStr,self.testview.name,self.testview.name);
结果:strong:地址相同,结果相同;copy:地址不同,结果不同
分析:setName方法内部,如果用strong修饰,直接赋值name=_name;如果用copy修饰,name=_name copy;
结论:使用copy修饰,防止外界修改。
不可变字符串使用copy和strong
@interface GrayView : UIView
@property(nonatomic,strong) NSString * name;
//@property(nonatomic,copy) NSString * name;
@end
NSString * nameStr=@"test";
self.testview.name=nameStr;
NSLog(@"%p:%@-%p:%@",nameStr,nameStr,self.testview.name,self.testview.name);
结果:strong:地址相同,结果相同;copy:地址相同,结果相同
分析:不可变字符串copy时不会创建新内存空间(反正也不能修改,开辟新空间没意义)
结论:使用strong修饰,直接赋值比调用copy效率更高。