@property(copy,nonatomic)NSMutableString*copyStr;
@property(strong,nonatomic)NSMutableString*strongStr;
@property(weak,nonatomic)NSMutableString*weakStr;
@property(assign,nonatomic)NSMutableString*assignStr; NSMutableString* originStr = [[NSMutableStringalloc]initWithString:@"Hello_reality"]; self.aCopyMStr = originStr;
self.strongMStr = originStr;
self.weakMStr = originStr; NSLog(@"mstrOrigin输出:%p,%@ ", originStr, originStr);
NSLog(@"aCopyMStr输出:%p,%@ ",_copyStr, _copyMStr);
NSLog(@"strongMStr输出:%p,%@ ",_strongStr, _strongStr);
NSLog(@"weakMStr输出:%p,%@ ",_weakStr, _weakStr);
NSLog(@"引用计数%@",[originStr valueForKey:@"retainCount"]); //输出结果
//2016-09-01 15:19:13.134 lbCopy[1205:87583] mstrOrigin 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] aCopyMStr 输出:0x7893deb0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] strongMStr 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] weakMStr 输出:0x7892a5e0,Hello_reality
//2016-09-01 15:19:13.135 lbCopy[1205:87583] 引用计数2

  只有copy会开拓新的内存地址,来保存数据。

  strong和weak的指针指向的仍然是源字符串的内存地址。

  那么造成的结果就是,对源字符串的修改也会造成strongStr和weakStr的内容变化,但是对copyStr没有影响。 

  而strong和weak的区别在于,strong会使originStr的引用计数+1,但weak不会

  ARC之前属性构造器的关键字是retain,copy,assign,strong和weak是ARC带出来的关键字。
  retain现在同strong,就是指针指向值地址,同时进行引用计数加1。

  结论:copy会重新开辟新的内存来保存一份相同的数据。被赋值对象和原值修改互不影响。strong和weak虽然都指向原来数据地址,原值修改的时候storng和weak会随之变化。区别是前者会对数据地址进行引用计数+1防止原地址值被释放,但后者不会,当其他值都不在指向值地址时,值地址被释放,weak的值也就是为nil了。我们称会对数据地址增加引用计数的为强引用,不改变引用计数的为弱引用。

  注:初始化和设为nil都可以将指针所指向的数据地址引用计数减少1。

  

[OC] @property时,copy、strong、weak、assign的区别的更多相关文章

  1. ios OC 关键字 copy,strong,weak,assign的区别

    一.先介绍 copy.strong.weak 的区别,如代码所示 @property(copy,nonatomic)NSMutableString*aCopyMStr; @property(stron ...

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

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

  3. ios中strong, weak, assign, copy

    copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是 ...

  4. 对于atomic nonatomic assign retain copy strong weak的简单理解

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环 ...

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

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

  6. iOS中属性 (nonatomic, copy, strong, weak)的使用 By hL

    以下内容来自Stackflow的详解 1.Nonatomicnonatomic is used for multi threading purposes. If we have set the non ...

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

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

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

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

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

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

随机推荐

  1. Jmeter 谷歌插件工具blazemeter录制脚本

    1.下载谷歌浏览器插件工具:blazemeter. 2.在谷歌浏览器中拖放安装扩展工具:blazemeter. 粘贴的图像828x219 13.5 KB 3.测试网站利用这个工具录制jmter脚本. ...

  2. 全局安装的 webpack运行时 报错 Error: Cannot find module 'webpack' ......

    全局安装的webpack   安装指令如下 cnpm install wepack -save-dev -g 但是 在我的项目空间运行webpack指令的时候 会报如下错误 为了方便抓取{ Error ...

  3. labelme连续将文件夹中的json文件进行可视化的指令

    for /r C:\Users\Fourmi\Desktop\ZP0 %i in (*.json) do labelme_json_to_dataset %i

  4. Java+selenium之WebDriver模拟鼠标键盘操作(六)

    org.openqa.selenium.interactions.Actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作.对于这些操作,使用 perform()方法进行执行 ...

  5. Just oj 2018 C语言程序设计竞赛(高级组)F:Star(结构体排序+最小生成树)

    F: Star Time Limit: 1 s      Memory Limit: 128 MB Submit My Status Problem Description 31世纪,人类世界的科技已 ...

  6. 小程序:最难点For的wx:key

    转自:http://www.wxappclub.com/topic/536 A:数据改变,导致重新渲染的两种情况: 1:有wx:key的情况(不重新创建,仅改变顺序) 添加元素或改变元素顺序导致数据改 ...

  7. python---自己实现二分法列表查找

    这是以我自己的思维来实现的,没有用递归. # coding = utf-8 # 二分查找,适用于有序列表,日常编程用不到,因为index函数可以搞定的. # 查找到数字,返回列表中的下标,找不到数字, ...

  8. dom操作节点之常用方法

    DOM:获取节点:{1. document.getElementById (元素id):通过元素id找到节点2. document.getElementsByClassName (元素类名classN ...

  9. openresty capture

    local args = {} args["name"] = "张三" args["sex"] = "男" local ...

  10. [转]搭建Hadoop伪分布式环境

    https://my.oschina.net/MyHeaven1987/blog/1821509 http://hadoop.apache.org/docs/current/hadoop-projec ...