浅谈对property几个关键字的理解
2015-09-19 17:31
197 查看
看了许多教程,对assign, copy, strong的总结差不多如下:
对于直接赋值的变量,如int,double,CGRect,使用assign;
对于NSString,使用copy;
对于对象类,使用strong(有时候是weak);
(关于weak与strong:weak变量只是指向内存地址,并没有持有)
但我个人使用NSString的时候写的修饰词一般是strong,也是可以正常运行的。
所以查了一下copy和strong的区别,主要是set方法有所不同
copy:release旧值,copy一个新对象,新对象的reference count为1
strong:将对象的引用计数+1并分配内存地址
@property (copy, nonatomic) NSString *copyStr;
@property (strong, nonatomic) NSString *strongStr;
如果二者被同样赋值
NSMutableString *str = @"123";
copyStr = str;
strongStr = str;
那么copyStr指向的内存地址与str是不同的,strongStr指向的内存地址与str相同
原因是copyStr是一个新对象,是深复制。
当[str appendingString:@"abc"]时,strongStr变化,copyStr并不会变化
我们一般并不希望NSString变量会随着赋值对象变化,所以使用copy深复制;
但我一般使用时是NSString为其赋值,所以copy和strong的效果是一样的。
对于直接赋值的变量,如int,double,CGRect,使用assign;
对于NSString,使用copy;
对于对象类,使用strong(有时候是weak);
(关于weak与strong:weak变量只是指向内存地址,并没有持有)
但我个人使用NSString的时候写的修饰词一般是strong,也是可以正常运行的。
所以查了一下copy和strong的区别,主要是set方法有所不同
copy:release旧值,copy一个新对象,新对象的reference count为1
strong:将对象的引用计数+1并分配内存地址
@property (copy, nonatomic) NSString *copyStr;
@property (strong, nonatomic) NSString *strongStr;
如果二者被同样赋值
NSMutableString *str = @"123";
copyStr = str;
strongStr = str;
那么copyStr指向的内存地址与str是不同的,strongStr指向的内存地址与str相同
原因是copyStr是一个新对象,是深复制。
当[str appendingString:@"abc"]时,strongStr变化,copyStr并不会变化
我们一般并不希望NSString变量会随着赋值对象变化,所以使用copy深复制;
但我一般使用时是NSString为其赋值,所以copy和strong的效果是一样的。
相关文章推荐
- Tomcat 端口、默认应用、域名配置实践
- 使用 CAS 在 Tomcat 中实现单点登录
- linux install kernel headers
- EcShop 中关于注册推荐 填写推荐人的功能实现
- Linux系统管理之——软件包管理
- bash编程:条件测试
- bash编程 :if,case语句
- 怎样网站加速
- Linux内核:seek机制
- CentOS 7 64bit系统上编译安装PHP 5.6.13
- 在CentOS7上安装MySQL Workbench
- Linux修改SSH端口号和禁止客户端远程root登录
- 网站主机安全之服务器的物理安全
- VMware Workstation中安装64位linux
- linux下arm汇编注释符
- 由linux下的多进程编程引发的关于进程间隔离的思考
- LVS+Keepalived实现高可用负载均衡群集
- Linux操作系统上的文件共享
- Apache CXF实战之二 传输pojo对象
- 使用FIO测试磁盘iops