当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因

iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因

2018年10月13日  | 移动技术网移动技术  | 我要评论

ios @property中的nsstring, nsarray, nsdictionary属性为什么大多时候用copy而不用strong的原因。

一、代码实现数组赋值不用copy数据分析

#import "viewcontroller.h"

@interface viewcontroller ()

@property (nonatomic,strong)nsarray *array;//全局不可变数组

@end

@implementation viewcontroller

- (void)viewdidload {

[super viewdidload];

nsmutablearray *marray = [nsmutablearrayarray];

[marray addobject:@"shihu"];

self.array = marray;

[marray addobject:@"zhangying"];

nslog(@"self.array --->%@ ,marray --> %@",self.array,marray);

}

提问:大家猜猜控制器会输出什么数据???

打印结果:

2017-09-10 12:19:28.300找bug~demo[74440:1165432] self.array --->(

shihu,

zhangying

) ,marray --> (

shihu,

zhangying

)

原因很简单, 因为objective-c支持多态.

所以表面上self.array是nsarray对象, 其实骨子里是nsmutablearray对象.这样的话将会对后期debug增加很大的成本, 可能会导致莫名其妙的错误.

二、用copy数据分析

- (void)viewdidload {

[super viewdidload];

nsmutablearray *marray = [nsmutablearrayarray];

[marray addobject:@"shihu"];

//self.array = marray;

self.array = [marraycopy];//浅拷贝一次

[marray addobject:@"zhangying"];

nslog(@"self.array --->%@ ,marray --> %@",self.array,marray);

}

提问:大家猜猜控制器会输出什么数据???

打印结果:

2017-09-10 12:25:27.720 找bug~demo[74493:1169444] self.array --->(

shihu

) ,marray --> (

shihu,

zhangying

)

结论:这样就能保证不管赋值的是可变还是不可变数组, nsarray就是nsarray了

三、补充图表更加理解copy与mutablecopy的区别:

图1:

\

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网