首页 > 代码库 > iOS之NSString类型为什么要用copy修饰
iOS之NSString类型为什么要用copy修饰
在开发的过程中,只知道NSString类型最好用copy修饰而不能用strong,但是不知道为什么,今天了解了下,总算搞明白了。
如下所示,当修饰符为copy时,因为NSMutableString是NSString类型的子类,所以可以用指针self.name指向mStr,但是我们知道copy的含义是指当重新赋值时深拷贝新对象再赋值给self.name,
所以此时self.name的指针和mStr的指针指向的对象就不同了,所以当给mStr对象发送方法appendString的时候,修改的只是mStr(此时的值变为mutablestring----addstring),而self.name依然不变(mutablestring----);相反当修饰符为strong时,因为strong的意思是指针指向原对象,并且引用计数+1,所以self.name和mStr指向同一个对象,当修改mStr时self.name也会一起变化。所以为了避免NSString类型的值被修改,一般建议用copy修饰符修饰。
@interface ViewController () @property (nonatomic,copy) NSString *name; //@property (nonatomic,strong) NSString *name; @end
- (void)viewDidLoad { [super viewDidLoad]; NSMutableString *mStr = [NSMutableString stringWithFormat:@"mutablestring----"]; self.name = mStr; [mStr appendString:@"addstriing"];//name的修饰符为copy时,name的结果为mutablestring---- NSLog(@"%@",mStr);//name的修饰符为strong时,name的结果为mutablestring----addstriing NSLog(@"%@",self.name); }
iOS之NSString类型为什么要用copy修饰
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。