关于copy和strong

2017-04-08  本文已影响0人  William8

.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的值。

上一篇 下一篇

猜你喜欢

热点阅读