例子:

NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅'];

上面一段代码会执行以下两个动作:  
1 在堆上分配一段内存用来存储@' MM的三室两厅 ' ,比如:内存地址为 0X1111  内容为 ' MM的三室两厅' ,  
2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA  内容自然为 0X1111

下面分别看下(assign,retain,copy):  
1.assign的情况: NSString  * myHouse  = [ houseOfMM   assign ];  
此时 myHouse 和 houseOfMM 完全相同,地址都是 0XAAAA  ,内容为 0X1111  ,即 myHouse 只是 houseOfMM 的别名,对任何一个操作就等于对另一个操作。因此 retainCount 不需要增加.(同进同出,关系好,一把钥匙,给我拿着)  
2.retain的情况: NSString  *  myHouse  = [ houseOfMM   retain ];  
此时 myHouse 的地址不再为 0XAAAA ,可能为 0XAABB ,但是内容依然为 0X1111 .因此 myHouse 和 houseOfMM都可以管理' 装梵几的三室两厅 '所在的内存。因此  retainCount 需要增加1.(有些独立,各自进出,两把钥匙)  
3.copy的情况: NSString  *  myHouse  = [ houseOfMM   copy ];

此时会在堆上重新开辟一段内存存放@'MM的三室两厅',比如0X1122,内容为@'MM的三室两厅',同时会在栈上为myHouse分配空间,比如地址:0XAACC,内容为0X1122,因此retainCount增加1供myHouse来管理0X1122这段内存.(两套@'装梵几的三室两厅',条件好,分居了,房子一人一套,所以钥匙一人一把。)

什么时候用assign,当然是破房子,简装的房子拉
基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)

什么时候用copy
含有可深拷贝的mutable子类的类,如NSArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString
(可深度拷贝的房子)
但是NSMutableArray这样的不可以,Mutable的不能用copy,不然初始化会有问题。切记

什么时候用retain
其他NSObject和其子类对象好嘛 (大多数)

ARC中的strong相当于非ARC中的retain,ARC来了以后多搞一把钥匙就strong了啦。

以上内容参考原地址为:点这里

weak:由ARC引入的对象变量的属性,比assign多了一个功能,对象消失后把指针置为nil,避免了野指针(不是null指针,是指向“垃圾”内存(不可用的内存)的指针)

nonatomic 
指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。

转载于:https://www.cnblogs.com/fuunnyy/p/4665967.html

assign,copy,strong,weak,nonatomic的具体理解相关推荐

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

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

  2. 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】

    @property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...

  3. Objective-c属性修饰关键字(assign retain copy strong weak)

    一.线程相关: [atomic/nonatomic] (1)atomic[默认属性]:OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误.而这种机制是耗费系统资源的,所 ...

  4. 对copy/strong/weak/__weak/__strong/assign的使用场景总结总结

    ARC在编译期间,根据Objective-C对象的存活周期,在适当的位置添加retain和release代码.从概念上讲,ARC与手动引用计数内存管理遵循同样的内存管理规则,但是ARC也无法防止循环强 ...

  5. copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理

    copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协 ...

  6. OC指示符assign、atomic、nonatomic、copy、retain、strong、week的解释

    在使用@property定义property时可以在@property与类型之间用括号添加一些额外的指示符,常用的指示符有assign.atomic.nonatomic.copy.retain.str ...

  7. iOS cop/assign /strong/weak

    1.OC中字符串为什么要用Copy 在iOS开发中,我们在定义一个NSString的时候都会用copy来修饰, @property (nonatomic, copy)NSString *str; 那为 ...

  8. @property 各个属性作用【使用时最需注意strong/weak类型】【补充部分内存知识】...

    一. 属性readwrite,readonly,assign,retain,copy,nonatomic 等各是什么作用,在那种情况下用? 1>  readwrite:同时生成get方法和set ...

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

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

最新文章

  1. 企业级LNMP架构搭建实例(基于Centos6.x)
  2. 使用CSS将文字长度限制为n行
  3. 域名后缀php做跳转首页,手机移动端网站和电脑PC端网站域名使用与跳转PHP代码...
  4. windows 下搭建python虚拟环境
  5. 单片机模块学习之键盘
  6. 下行文格式图片_帮你填平论文投稿格式修改这个大坑,一文了解三大出版社投稿要求...
  7. mysql设置token有效期_记住我 token保存到数据库
  8. [渝粤教育] 西南科技大学 机械控制工程基础在线考试复习资料
  9. 在计算机管理中创建不同的用户,为什么在计算机管理员里创建密码密码总是不符合要求...
  10. 多目标进化优化(MOEA)方法
  11. ugui unity3d 仪表盘_Unity3D---UGUI---UI创建以及Canvas设置
  12. [转]Windows server 2008网络负载均衡集群
  13. CorelDRAW——VBA实例篇一个简单的VBA插件
  14. 颜色拾取器和红蜻蜓截图
  15. Unreal4 入门(安装)
  16. 一个百万富翁碰到一个陌生人,陌生人找他谈了一个换钱的计划.该计划如下:我每天给你10万,而你第一天给我一分钱,第二天我仍给你十万,你给我二分钱,第三天我仍给你十万,你给我四分钱......你每天给我的
  17. 九、cadence ic 5141 ——反相器版图绘制
  18. 近似值怎么用计算机,用计算器进行近似计算.docx
  19. matlab里面幂指数怎么写,幂和指数 - MATLAB Simulink - MathWorks 中国
  20. 前端练习--京东图片链接

热门文章

  1. 嵌入式ARM多核处理器并行化方法
  2. 快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用。
  3. SAP的Cloud Platform增加了多云支持和商业语义
  4. 我的emacs配置文件
  5. BZOJ 2434 阿狸的打字机
  6. bootstrap 全局 CSS 样式
  7. 重在参与吗。。。。。。。。
  8. linux构建web主机
  9. MapReduce运行原理和过程
  10. PHP 项目中单独使用 Laravel Eloquent 查询语句来避免 SQL 注入