.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的值。
网友评论