@property中的copy关键字
2024-09-08 14:10:59
1.@property中的copy的作用
- 防止外界修改内部的值
@interface Person : NSObject
@property (nonatomic, retain) NSString *name;
@end
NSMutableString *str = [NSMutableString stringWithFormat:@"lnj"]; Person *p = [[Person alloc] init];
p.name = str;
// person中的属性会被修改
[str appendString:@" cool"];
NSLog(@"name = %@", p.name);
- 防止访问对象对象已经释放
不用copy情况
Person *p = [[Person alloc] init];
p.name = @"lnj";
Dog *d = [[Dog alloc] init];
d.age = 10;
NSLog(@"retainCount = %lu", [d retainCount]); // 1
p.pBlock = ^{
// 报错, 调用之前就销毁了
NSLog(@"age = %d", d.age);
};
[d release]; // 0
p.pBlock();
[p release];
用copy情况
Person *p = [[Person alloc] init];
p.name = @"lnj";
Dog *d = [[Dog alloc] init];
d.age = 10;
NSLog(@"retainCount = %lu", [d retainCount]); // 1
p.pBlock = ^{
// 会对使用到的外界对象进行一次retain
NSLog(@"age = %d", d.age);
NSLog(@"retainCount = %lu", [d retainCount]); // 1
};
[d release]; // 1
p.pBlock();
[p release];
2.@property内存管理策略选择
非ARC
- 1> copy : 只用于NSString\block
- 2> retain : 除NSString\block以外的OC对象
- 3> assign :基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端用assign
ARC
- 1> copy : 只用于NSString\block
- 2> strong : 除NSString\block以外的OC对象
- 3> weak : 当2个对象相互引用,一端用strong,一端用weak
- 4> assgin : 基本数据类型、枚举、结构体(非OC对象)
最新文章
- 动画的使用—View Animation
- 学习之js绑定事件
- JAVA中抽象类的一些总结
- ToolBar存档
- linux中压缩与解压缩命令小结
- sublime2 Ctags 快捷键
- mysql其他函数
- [转]python对json的相关操作
- SharePoint各版本信息
- 工作经常使用的SQL整理
- html、js简单实现含中文csv文件下载(后端为django)
- Python [目录]
- .Net Core从命令行读取配置文件
- etcd 启动错误
- Linux上VsCode编译打包运行
- java / android int类型如何判空?
- 002.DNS-BIND简介
- php如何判断IP为有效IP地址
- 转:tomcat安全设置
- 二维码Data Matrix的解码实现(zxing-cpp)
热门文章
- C++基础之参数重载
- <;数据结构>;XDOJ314.完全二叉树的子树
- 使用 DML语句,对 “锦图网” 数据进行操作,连接查询(内连接,左外连接,右外连接,全连接)
- JS运行三部曲(预编译)
- hadoop 之 常用基本操作
- Nginx_配置文件nginx.conf配置详解
- Python_上下文管理器
- JQuery iframe 刷新效果
- 基于rabbitmq延迟插件实现分布式延迟任务
- LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]