一.强弱引用

强引用:strong reference

弱引用:weak reference

引用可以理解为指针A指向的对象B。换句话说,拥有指针A的对象是对象B的所有者(ownership).

区别:其中strong就相当于retain属性,而weak相当于assign。

1.一般的引用都是强引用。但为什么又提出弱引用呢?

弱引用的提出是为了防止强引用出现reference cycle,也就是指向的死循环,如果出现死循环,容易出现内存泄漏。

2.弱引用的特点是什么?如何使用弱引用?

__weak BNRItem *_container;//使用“__weak”

  • 多个对象A引用某个对象B,都会retain。但是当你指定弱引用后,就不会retain。当对象引用数为0的时候,自动释放,并让把使用弱引用的指针,设置为nil
  • 当对象A使用弱引用,对象A释放空间的时候,指针会变成nil

其他:nonatomic与atomic主要面对的是线程安全的问题,当然使用atomic更安全,获取数据更准备,使用nonatomic,会更高效,原因就是在于加锁的缘故嘛。但是苹果开发一般都使用的是nonatomic

二.properties

@propery NSString *itemName;

此语句做了三件事情:一个实例变量,两个访问实例变量的方法。

propery的属性:

@property (nonatomic, readwrite, strong) NSString *itemName;

  • 多线程属性:有两个值,atomic和nonatomic,默认是使用atomic,但是大多数程序使用nonatomic,其实就是选择是否采用原子操作的问题。例子:@property (nonatomic)NSString *item;
  • 读/写属性:有两个值,readwrite 和readonly ,默认都是readwrite,如果选择readonly,则只有get属性。
  • 内存管理属性:有四个值,strong,weak,copy ,unsafe_unretained,这个属性主要用来描述对象的实例变量指针引用类型。

unsafe_unretained是一个直接的assign。没有retain计数,如果变量指向的对象已经销毁了,其指针值不会自动设置为nil。但是weak属性是可以的,一般用在非对象的引用中。

copy是复制一份数据,能够防止其他拥有者改变数据内容受到的影响

如果你有更多的需求,则可以自己建立,setItem,item方法。

最新文章

  1. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
  2. (转载)Linux如何编译安装源码包软件
  3. [转载]Emmet使用
  4. 《锋利的jQruery》读书笔记
  5. 【Linux程序设计】之进程控制&守护进程
  6. android studio问题-ICCP:Not recognizing known sRGB profile
  7. [LeetCode]题解(python):035-Search Insert Position
  8. hdu 1729 Stone Game 博弈论
  9. Qt之QComboBox(基本应用、代理设置)
  10. TheFifthWeekText
  11. 转:【Java集合源码剖析】Hashtable源码剖析
  12. Kali Linux 渗透测试手册(1.1)安装虚拟机
  13. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
  14. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第一周:阶段性总结)
  15. python全栈开发笔记---------函数
  16. 怎么看SQL表里某列是否是自增列
  17. 《HTTP 权威指南》笔记:第十二章 基本认证体制
  18. Linux输入子系统 : 按键驱动
  19. 如何从jks文件中导出公私钥
  20. zk特性和场景

热门文章

  1. loadrunner破解出现“license security violation,Operation is not allowed”的错误提示
  2. Struts2+DAO层实现实例01——搭建Struts2基本框架
  3. Android记事本06
  4. 软工实践Alpha冲刺(6/10)
  5. 第二章 Internet 地址结构
  6. 【Android】实验5 数独游戏界面设计-报告提交时间:2016.4.15
  7. KVC 开发详情
  8. 2013 ACMICPC 杭州现场赛 I题
  9. VS debug 简记
  10. stringutil的方法