@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. 弹框勾选datatable中的数据,点击保存后添加到另一个表中,同一个页面

    需求描述:做编辑的时候,点击添加按钮,弹出数据表table2,勾选弹出框中的数据,点击保存后能够添加到table1中,并且已经被添加到table1中的数据,在弹出框中显示已选,checkbox隐藏:t ...

  2. java-HTML&javaSkcript&CSS&jQuery&ajax

    CSS  伪装 1.<style>a;link{color:#000000} a:visited{color:#000000; a.:hover{color:#FF00FF} a:acti ...

  3. Centos + docker,Ubuntu + docker介绍安装及详细使用

    docker笔记 常用命令 设置docker开机自启:sudo chkconfig docker on 查所有镜像: docker images 删除某个镜像:docker rmi CONTAINER ...

  4. Appium Python API 中文版

    Appium_Python_Api文档 1.contextscontexts(self): Returns the contexts within the current session. 返回当前会 ...

  5. 使用powerdesigner导入sql脚本,生成物理模型

    有些时候我们的powerdesigner以jdbc的形式链接本地数据库可能会失败,这时候我觉得从sql文件中生成物理模型是个很不错的方法 1.打开powerdesigner,文件->->r ...

  6. Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、

    1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行 ...

  7. 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务

    1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...

  8. Zabbix监控——Zabbix自定义用户参数制作监控项

    https://blog.51cto.com/183530300/2087774 https://www.cnblogs.com/richardzgt/articles/7889404.html

  9. innobackupex做MySQL增量备份及恢复

    http://www.cnblogs.com/paul8339/p/6731688.html

  10. poj3889

    看题解之前并不知道怎么搞.. 分治是显然的 但是我不知道怎么判断4个块的位置 发现很简单... 注意14是23旋转得到的 而同时也等价于交换了横纵坐标 所以就可以做了