@property的参数
来源:互联网 发布:怎么更改淘宝密码修改 编辑:程序博客网 时间:2024/06/06 04:40
转载请标明出处:
http://blog.csdn.net/xmxkf/article/details/51353580
本文出自:【openXu的博客】
copy拷贝(复制)分类:
①、深拷贝(深复制):内容拷贝,会产生新对象
②、浅拷贝(浅复制):指针拷贝,不会产生新对象
至于copy某个对象是深拷贝还是浅拷贝,只需要遵循下面两个原则,然后推测即可。
copy语法的两个原则:
①、新指针和旧指针指向对象的内容要一样
②、修改新指针指向的对象不会影响旧指针指向的对象
修改旧指针指向的对象不会影响新指针指向的对象
比如:
#pragma mark NSString的mutableCopy 深拷贝void stringMutableCopy(){ // 不可变的字符串 NSString *old = [[NSString alloc] initWithFormat:@"Jack"]; // 拷贝产生了一个可变的字符串,为了修改新指针指向的对象不会影响旧指针指向的对象,所以必须生成一个新的对象(深拷贝) NSMutableString *new = [old mutableCopy]; [new appendString:@" 1234"]; NSLog(@"old=%@", old); NSLog(@"new=%@", new); [new release]; [old release];}#pragma mark NSString的copy 浅拷贝(新旧指针指向的字符串都不能改变,所以没必要生成新的对象)void stringCopy(){ //不可变字符串 NSString *old = [[NSString alloc] initWithFormat:@"Jack"]; // 在这种情况(返回对象本身)下,相当于retain NSString *new = [old copy]; NSLog(@"new-%d", [new retainCount]); NSLog(@"old-%d", [old retainCount]); NSLog(@"old=%p", old); NSLog(@"new=%p", new); NSLog(@"old=%@", old); NSLog(@"new=%@", new); //[old release]; [new release]; [old release];}
在非ARC的情况下:
①、copy:release旧值,copy新值
②、assign:直接赋值
③、retain:release旧值,retain新值
在ARC的情况下:
①、copy:release旧值,copy新值
②、assign:用在基本数据类型上
③、strong:强引用,类似于retain
③、weak:类似于assign(用在对象身上)
使用retain
后生成的set
方法如下:
- (void)setName:(NSString *)name{ if (_name != name) { [_name release]; _name = [name copy]; }}
使用copy
后生成的set
方法如下:
- (void)setName:(NSString *)name{ if (_name != name) { [_name release]; _name = [name copy]; }}
总结:基本数据类型用assign,NSString用copy,ARC下如果需要得到对象的引用(引用计数器+1,宿主在,对象就不会被销毁)用strong,如果不需要则用weak。
3 0
- @property的属性参数
- @property的参数说明
- @property的参数
- @property的参数
- 枚举的@property参数
- @property 参数(property 的进阶用法)
- @property 属性参数的意义
- property参数的一些常识
- 黑马程序员----@property的参数
- @property的几个参数说明
- Object-c------@property的参数
- 关于property参数的理解
- @property的参数说明(转载)
- Objective-c - @property的参数
- property参数
- @property 参数
- @property参数
- @property参数
- Android截屏
- 简单实现跑马灯效果
- vs 中编译qt5 项目中文乱码问题
- 数据类型分类
- Logstash之kafka数据入ElasticSearch
- @property的参数
- 定时器
- 阿里dubbo框架使用系列:简介
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
- 把数组排成最小的数
- Java:在类中定义接口有什么用处?
- gradle classpath 升级报错
- formvalidate默认验证规则
- (1.1.13.1)正则表达式 - 语法