首页 > 其他 > 详细

1.ARC下是否有内存溢出等问题

时间:2016-01-03 00:41:18      阅读:281      评论:0      收藏:0      [点我收藏+]

1.ARC下是否有内存溢出等问题?

  答案:必须要担心啊,ARC也不是万能的。答案:必须要担心啊,ARC也不是万能的。这里主要是涉及到集合类的数据类型

       比如数组,我们定义了一个可变数组muarr1,然后把一个对象p1加到muarr1中,此时会对这个对象 retain一次,相当于retainCount+1,

      只有当这个数组removeObject:p1删除这个对象时、或者这个数组自己 muarr1=nil;了,或者这个数组removeAllObjects时,

             它才会对这个对象或者里面所有对象release一次。

 

2.@property参数

  1)是否要生成set方法(若为只读属性,则不生成) 

    readonly:只读,只会生成getter的声明和实现 
    readwrite:默认的,同时生成setter和getter的声明和实现 


  2)多线程管理(苹果在一定程度上屏蔽了多线程操作) 
    nonatomic:高性能,一般使用这个 
    atomic:低性能,默认 


  3)内存管理相关参数 
    retain: 对对象release旧值,retain新值(适用于OC对象类型) 
    assign: 直接赋值(默认,适用于非oc对象类型) 
    copy: release旧值,copy新值 
    验证assign如果作用在对象上,实际上就是直接赋值 


  4)set和get方法的名称 
    修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter。 
    @property(nonatomic,assign, setter=abc:,getter=haha)int age

    1,getter=getterName,setter=setterName,设置setter与getter的方法名,除非你想自己取名,否则一般使用默认的名字即可。以免造成混乱。
    2,readwrite,readonly (只生成getter方法),设置可供访问级别的限制。
    2,assign,调用setter方法时直接赋值,不进行任何retain操作。
    3,retain,调用setter方法时,先release旧值,然后对赋予的新值执行retain,相当于一次指针的拷贝。
    4,copy,setter方法进行Copy操作,与retain处理流程一样,先release旧值,再Copy出新的对象,retainCount为1。其实是建立一个新的对象。
    5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成   数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

 

1.ARC下是否有内存溢出等问题

原文:http://www.cnblogs.com/jiayongqiang/p/5095601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!