iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因
来源:互联网 发布:黑米抢购软件下载 编辑:程序博客网 时间:2024/04/29 18:23
//联系人:石虎 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的原因
- NSString不用strong而用copy修饰的原因
- iOS 面试题~用@property声明NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用 @property 声明的 NSString (或 NSArray,NSDictionary) 经常使用 copy 关键字,为什么?如果改用strong关键字,可能造成什么问题?
- 用@property声明的NSString, NSArray, NSDictionary 为什么要用copy ?
- iOS NSString,NSArray,NSDictionary的Copy属性使用
- iOS NSString,NSArray,NSDictionary的Copy属性使用
- iOS 开发 NSString(NSDictory,NSArray)为什么用copy修饰,而不是用strong修饰
- 定义属性时NSArray,NSString,NSDictionary为何要用copy
- 为啥NSString的属性要用copy而不用retain
- 为什么NSMutableArray必须用strong,而NSArray必须用copy?
- 为什么NSMutableArray必须用strong,而NSArray必须用copy?
- iOS NSString,NSArray,NSDictionary声明属性关键字
- NSString为什么用copy而不是strong,NSMutableString为什么用strong而不是用copy(或者NSArray及NSMutableArray等)
- Linux 新手必学的 20 个命令
- Tomcat其他方式启动
- 写个发邮件的功能php的(全代码)
- 新站如何提交百度sitemap,吸引蜘蛛快速爬取
- c/c++面试问题
- iOS @property中的NSString, NSArray, NSDictionary属性为什么大多时候用copy而不用strong的原因
- 1203:单词分割
- Arduino nano的bootloader文件烧录
- MFC中简单绘图几种方式
- 百度绿萝算法,SEO打油诗,统计分析IP,PV,UV
- Swift3.0 屏幕适配
- 2017-09-10考试情况总结
- 优先队列实现哈夫曼编码(贪心法)
- 基于EasyDarwin框架实现EasyNVR H5无插件直播流媒体服务器方案