本文主要是介绍iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、代码实现数组赋值不用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
)
三、补充图表更加理解copy与mutableCopy的区别:
图1:
谢谢!!!
这篇关于iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!