博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSString用copy还是strong修饰
阅读量:6175 次
发布时间:2019-06-21

本文共 821 字,大约阅读时间需要 2 分钟。

如果确定要给属性NSString赋一个不可变的值时,用strong,其他情况用copy。使用copy来修饰属性,在进行赋值的时候,会先做一个类型判断,如果赋的值是一个不可变的字符串,则走strong的策略,进行的是浅拷贝;如果是可变的字符串,则进行深拷贝创建一个新的对象。所以如果我们确定是给属性赋值一个不可变的值,就不用copy再多去判断一遍类型。测试代码如下:

@property(nonatomic, strong) NSString *str1;@property(nonatomic, copy) NSString *str2;NSString *data = @"test";self.str1 = data;self.str2 = data;NSLog(@"strongStr = %p,copyStr = %p", self.str1, self.str2);//打印的是同一个地址://strongStr = 0x10298f4f8,copyStr = 0x10298f4f8NSMutableString *data = [[NSMutableString alloc] initWithString:@"test"];self.str1 = data;self.str2 = data;NSLog(@"strongStr = %p,copyStr = %p", self.str1, self.str2);//打印的不是同一个地址://strongStr = 0x6000003635d0,copyStr = 0xdec3a66540416ef2复制代码

我们经常使用对象接收网络数据,通常使用strong,因为不会改变。而如NSCache属性中的name字段,应该使用copy,不然打印出来的名字就有可能非预想值。

转载于:https://juejin.im/post/5ced39555188252c023f93bd

你可能感兴趣的文章
光模块及光纤知识(含分类,常用类型介绍)
查看>>
Apache 单IP多端口设置
查看>>
安装系统前的准备---vmware
查看>>
Tiny并行计算框架之使用介绍
查看>>
Linux od命令
查看>>
一个不错的MySQL集群管理工具
查看>>
mysql-proxy 按表分发查询的lua脚本
查看>>
在wordpress主题下面添加二级菜单
查看>>
结合MongoDB开发LBS应用
查看>>
CentOS 下JDK安装
查看>>
从点名信想到母亲的一件事
查看>>
Nginx + Django
查看>>
我的友情链接
查看>>
cnetos7更改网卡类型
查看>>
用shell脚本编写进度条
查看>>
使用Live555类库实现的网络直播系统
查看>>
MySQL的使用
查看>>
分我一半的眼泪代码
查看>>
国内Saas2.0还有多远要走
查看>>
同步synchronized方法和代码块
查看>>