关于copy和strong

.h

@property (copy, strong,nonatomic) NSMutableArray *array;

.m

NSArray *array1 = [NSArray arrayWithObjects:@"234", @"323", nil];

NSMutableArray *tmpArray = [NSMutableArray arrayWithObjects:@"123", @"232", @"2343", nil];

self.array = array1;//运行到这儿提示警告

self.array = tmpArray;

[self.array addObject:@"234"];// 运行到这个地方崩溃


对于一个Mutable对象,copy方法返回的对象是immutable对象,所以array其实是immutable的,尽管它是mutable类型,修改immutable对象时就会报错。所以对于mutable的属性,我们应该声明为strong类型。


.h

@property (strong,copy, nonatomic) NSString *name;

.m

NSMutableString *mulString = [[NSMutableString alloc] initWithString:@"William"];

self.name = mulString;

NSLog(@" >>>>>>>>>>>>>before name is %@", self.name);

[mulString appendString:@" Wang"];

NSLog(@" >>>>>>>>>>>>>after name is %@", self.name);

防止NSString被修改。当NSString的赋值来源也是NSString时,strong和copy的作用相同,都是给复制来源的引用计数加1;当NSStrig的赋值来源是NSMutableString时,copy会做深拷贝,即重新生成一个新的对象,修改赋值来源不会影响NSString的值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发中经常会遇到关于NSString属性的声明,在ARC下,NSString属性的声明有两个特性关键字可选:...
    life白玉兰阅读 4,913评论 2 7
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 4,425评论 0 2
  • 远处的少年,那明媚的脸庞下有多少看不懂的朦胧,想要靠近你,却离得愈来愈远。 初识 初秋,在这个迷茫的生活圈里,见到...
    楠溪儿阅读 3,892评论 1 4
  • 元旦假期结束,想着明天就是新年的第一个工作日充满激情的准备睡觉早起上班,却接到上级的通知,由于雾霾严重,明天幼儿...
    小样很野蛮阅读 1,170评论 0 1
  • 文/孤鸟差鱼 你多不可爱 又在试探我 问我爱星星还是你
    孤鸟差鱼阅读 1,118评论 0 3