// 首先定义2个属性
@property (nonatomic, strong) NSString *stStr;
@property (nonatomic, copy) NSString *coStr; // 测试
- (void)_strong_copy {
NSMutableString *mutableStr = [NSMutableString stringWithFormat:@"abc"]; self.stStr = mutableStr;
self.coStr = mutableStr; NSLog(@"mutableStr:%p, %p", mutableStr, &mutableStr);
NSLog(@"strongStr :%p, %p", _stStr, &_stStr);
NSLog(@"copyStr :%p,%p", _coStr, &_coStr); NSLog(@"\n\n"); [mutableStr appendString:@"de"];
NSLog(@"mutableStr:%p", mutableStr);
NSLog(@"retainStr :%@", _stStr);
NSLog(@"copyStr :%@", _coStr);
}

控制器Log:

-- ::20.117 Demo_OC[:] mutableStr:0x7fece3c13860, 0x7fff56bf8cd8
-- ::20.117 Demo_OC[:] strongStr :0x7fece3c13860, 0x7fece3e8d428
-- ::20.118 Demo_OC[:] copyStr :0xa000000006362613,0x7fece3e8d430 -- ::20.118 Demo_OC[:] mutableStr:0x7fece3c13860
-- ::20.118 Demo_OC[:] retainStr :abcde
-- ::20.118 Demo_OC[:] copyStr :abc

通过日志我们可以分析:

1、mutableStr 被修改时,strong修饰的字符串值发生了变化;copy修饰的字符串值未发生变化。

结论:strong修饰的字符串仅仅是浅拷贝,本身会随着mutableStr改变而改变;而copy修改的字符串是深拷贝,不会随着mutableStr改变而改变。

2、使用copy修饰的字符串更安全一些,可以保证我们的值不会随着mutableStr的改变而改变。

NSString 使用 copy、strong的更多相关文章

  1. iOS 浅谈:深.浅拷贝与copy.strong

    深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyStri ...

  2. 【转】iOS 浅谈:深.浅拷贝与copy.strong

    深.浅拷贝 copy mutableCopy NSString 1 2 3 4 5 6 NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSStri ...

  3. ios 内存管理与property copy strong weak assign

    - (void)fun{  NSString* str = [[NSString alloc] initWithString:@"string"];  NSLog(@"% ...

  4. 何时使用copy,strong,weak,assign关键字 定义属性

    现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained ...

  5. NSString NSMutableString copy mutableCopy retain weak strong整合

    copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...

  6. NSString copy && strong

    http://www.cocoachina.com/ios/20150512/11805.html 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):stro ...

  7. @property中的copy.strong.weak总结

    1.NSString类型的属性为什么用copy NSString类型的属性可以用strong修饰,但会造成一些问题,请看下面代码 #import "ViewController.h" ...

  8. assign,copy,strong,weak,nonatomic的理解

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一段 ...

  9. ios copy/strong/weak..使用总结

    总结 关于属性的这些选项的学习,做一下总结: 所有的属性,都尽可能使用nonatomic,以提高效率,除非真的有必要考虑线程安全. NSString:通常都使用copy,以得到新的内存分配,而不只是原 ...

随机推荐

  1. DNS(域名系统)服务器

    DNS(Domain Name System),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的Ip数串.通过主机名,最终得到该主机 ...

  2. wcf双工通信

    一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: 定义一个IDuplexHello服务接口 [ServiceContract( ...

  3. [Android基础]Android四大组件之BroadCast

    BroadCast的定义: 广播是一种订阅--通知 事件,广播接收者向Android系统 register (订阅广播),广播发送者向Adnroid系统 sendBroadCast(发送广播),然后A ...

  4. Linux .Net Core

    Linux .Net Core自宿主应用程序瘦身记 一,.NET Core 自宿主应用程序个头有点大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标 ...

  5. NET Core:部署项目到Ubuntu Server

    NET Core:部署项目到Ubuntu Server 概述 基于上一篇成功安装Ubuntu Server 16.10的基础上,接下来继续我们ASP.NET Core项目的部署之旅! 只是对于这些年整 ...

  6. ListView 视图(View)

    自定义视图,设置默认ListView,ListViewItems默认样式 public class VirtualStackPanelView : ViewBase { public static r ...

  7. MVC3 自定义的错误页

    ASP.NET MVC3中如果配置文件出错了,怎么跳转到自定义的错误页,现在参考网上的档案是说 添加 如下配置文件,并且在路径Views/Shared/下添加Error页面,测试下没有用的,请大家看看 ...

  8. js 数组array es5-es6+ 新增方法函数

    arr.forEach(function(item,index,arr){},this)  相当于普通的for循环,第一个回调参数,第二个this可以重定向[箭头函数则不生效] arr.map() 非 ...

  9. Kendo 单页面应用(一)概述

    Kendo 单页面应用(一)概述 Kendo 单页面应用(Single-Page Application,缩写为 SPA)定义了一组类用于简化 Web 应用(Rich Client)开发,最常见的单页 ...

  10. [Java]获取byte数组的实际使用长度

    背景:byte.length只能获取到初始化的byte数组长度,而不是实际使用的长度,因此想要获取到实际的使用长度只能靠其他方法实现. 方法一: public class ByteActualLeng ...