成员变量NSString类型指针的属性为什么用copy(属性)
2016-03-21 11:07
295 查看
创建一个分类Person设置属性@property(nonatomic,strong) NSString * name;
在- (void)viewDidLoad 中打印测试
name的属性是strong,则给name赋值的时候是强指针的name指向了可变的str的内存空间,从打印地址的结果知道,per.name 与str的地址一样,如果对可变的str做了改动( [str setString:@"好啊好啊"]),则per.name的值也会相应改变(因为他们指向的是同一个内存地址).然而这不是我们想要的结果.
如果给per.name赋值了一个不可变的字符串..就不用说了,指向同一个内存地址,都不可以改变.
给指针name换成copy属性
在- (void)viewDidLoad 中打印测试
从打印结果可以看到per.name 与可变的 str不是同一个内存地址.per.name与str是两个完全不想关的对象,则对可变的str做修改,完全不影响per.name的值.
*如果试图对per.name做修改[per.name setString:@"hello"] ---不可以---我们的目的已经达到.
把per.name赋值给不可变的str测试
地址相同,不可改变.只是引用计数器+1
一个对象的准确类型取决于被分配的内存空间的类型
小结:
NSString的指针建议使用copy属性,它指向的如果是可变的NSMutablestring的str,则会创建新的对象(开辟新的内存空间),对原对象str做修改不会影响per.name的值.并且per.name也不能改变
per.name指针属性是copy,指向的不变的NSString的str,则不会创建新对象,只是引用计数+1
per.name指针的属性是strong的时候,如果per.name指向了课变的NSMutablestring的str,则str与per.name指针指向了同一个内存地址,str做出修改,per.name也会跟着变.
*per.name指针的属性是strong的时候,如果per.name指向了不可变的NSString则都不能改变.
总之:NSString用copy属性,都不可改变per.name的值.strong属性,看情况.
在- (void)viewDidLoad 中打印测试
name的属性是strong,则给name赋值的时候是强指针的name指向了可变的str的内存空间,从打印地址的结果知道,per.name 与str的地址一样,如果对可变的str做了改动( [str setString:@"好啊好啊"]),则per.name的值也会相应改变(因为他们指向的是同一个内存地址).然而这不是我们想要的结果.
如果给per.name赋值了一个不可变的字符串..就不用说了,指向同一个内存地址,都不可以改变.
给指针name换成copy属性
在- (void)viewDidLoad 中打印测试
从打印结果可以看到per.name 与可变的 str不是同一个内存地址.per.name与str是两个完全不想关的对象,则对可变的str做修改,完全不影响per.name的值.
*如果试图对per.name做修改[per.name setString:@"hello"] ---不可以---我们的目的已经达到.
把per.name赋值给不可变的str测试
地址相同,不可改变.只是引用计数器+1
一个对象的准确类型取决于被分配的内存空间的类型
小结:
NSString的指针建议使用copy属性,它指向的如果是可变的NSMutablestring的str,则会创建新的对象(开辟新的内存空间),对原对象str做修改不会影响per.name的值.并且per.name也不能改变
per.name指针属性是copy,指向的不变的NSString的str,则不会创建新对象,只是引用计数+1
per.name指针的属性是strong的时候,如果per.name指向了课变的NSMutablestring的str,则str与per.name指针指向了同一个内存地址,str做出修改,per.name也会跟着变.
*per.name指针的属性是strong的时候,如果per.name指向了不可变的NSString则都不能改变.
总之:NSString用copy属性,都不可改变per.name的值.strong属性,看情况.
相关文章推荐
- 我的工作脚本
- gitbash使用
- shell
- CentOS本地yum源
- Opnet 14.5 + Win7 + VS2013安装教程
- windows2008操作系统网站发布后,为什么外网仍旧无法访问2011-08-05 10:19
- gitbash使用
- 黑客如何快速查找网站后台地址方法整理
- 收集一些常见的webshell后门的特征码
- 求一网站swf广告条幅制作软件 SwishMax
- 手机网站浏览器验证跳转js代码
- fopen()和file_get_contents()打开URL获得网页内容的用法区别
- centos fcitx 安装 配置 详解
- Cannot access empty property
- VPS的网站被挂木马的解决办法
- Linux修改时间时区并在Tomcat中生效
- Apache VirtualHost配置
- 完美解决35dir获取网站缩略图问题(两种方法)
- dede中英文版网站 ,网站英文文章删不掉
- DEDECMS安全设置 执行php脚本限制设置方法(apache+nginx)