不太注意的面试题

2018-05-24  本文已影响11人  宙斯YY

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效率更高。

上一篇 下一篇

猜你喜欢

热点阅读