IOS--内存管理 (retain, assign,copy, strong,weak)

原创
2016/01/27 15:25
阅读数 146

引用计数:为了方便管理内存,oc引入了饮用计数,基本原则:谁创建,谁释放 !

   目的:IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数。 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样。


   一:宏观理解:

      

       备注:

   @property的参数分为三类,也就是说参数最多可以有三个,中间用逗号分隔,每类参数可以从上表三类参数中人选一个。如果不    进行设置或者只设置其中一类参数,程序会使用三类中的各个默认参数,默认参数:(atomic,readwrite,assign)

  一般情况下如果在多线程开发中一个属性可能会被两个及两个以上的线程同时访问,此时可以考虑atomic属性,否则建议使用   nonatomic,不加锁,效率较高;readwirte方法会生成getter、setter两个方法,如果使用readonly则只生成getter方法;



  二          关键词:


                 (1)  retain : 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount 会 +1;


                 (2)   copy :表示拷贝特性,setter方法将传入对象复制一份,需要完全一份新的变量;内存地址改变;


                 (3)   assign:赋值特性,不涉及引用计数,弱引用,setter方法将传入参数赋值给实例变量,仅设置变量时使用;

                 (4)   strong:强引用,arc中使用,与mrc中retain类似,使用之后,引用计数+1;实例变量对传入的对象有所有权,即强引用。strong根retain的意思相同并产生相同的代码,语意上更能体现对象的关系;


                 (5)   weak:弱引用,arc中使用,如果传入的对象被释放了,其指向nil,可以有效的避免野指针,其引用计数为1;


       备注: arc(自动引用计数) ,arc 是 ios5推出的新功能,通过arc,可以自动的管理内存。在arc模式下,只要没有强指针(强引用)指向对象,对象就会被释放。在arc模式下,不允许使用retain,release,retaincount等方法。并且,如果使用dealloc方法,不允许调用 [ super   dealloc];

                      arc模式下的property变量修饰词为strong, weak, 相当于mac 模式下的 retain ,assign ; strong代替retain,缺省关键词,代表强引用。weak代替assign,声明了一个可以自动设置nil的弱引用,但是比assign多一个功能,指针指向的地址被释放之后,指针本身也会自动释放!(简单来说,就是对传入的对象没有所有权,当该对象的引用计数为0时,即该对象被释放后,用weak声名的实例变量指向nil, 即实例变量的值为 0);


展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部