ARC

作者: 一只不断前进的小蜗牛 | 来源:发表于2019-02-25 17:50 被阅读0次

    ARC又叫自动引用计数.

    ARC的判断准则:只要没有强指针指向对象,就会释放对象。

    指针分两种:

    1)强指针,默认情况下,所有指针都是强指针 __strong

    2)  弱指针,__weak   使用示例:__weak Person * p = [[Person alloc] init];

    手动管理内存到ARC的等效转变

    @propery(nonatomic,retain)  -----> @property(nonatomic,strong) 适用于OC对象

    @propery(nonatomic,assign)  -----> @property(nonatomic,weak)  适用于OC对象

    @propery(nonatomic,assign)  -----> @property(nonatomic,assign)  适用于基本类型

    循环引用问题在ARC中的解决:一个属性用strong,另一个用weak即可。

    方法:

    可以给对象发送retainCount消息(调用retainCount方法)获得当前的引用计数器值

    对象的销毁

        1.当一个对象的引用计数器为0时,那么它将被销毁,系统会回收它所占的内存。

        2.当一个对象被销毁时,系统会自动向对象发送一条dealloc消息。

        3.一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言。

        4.一旦重写dealloc方法,就必须调用[super dealloc];并放在最后面调用。

        5.不要直接调用dealloc方法

        6.一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序崩溃(野指针错误)。

    三、@property参数

      1>控制set方法的内存管理

        1.retain:release旧值、retian新值(用于oc对象)。

        2.assign:直接赋值,不做任何内存管理(默认用于非oc对象,可以用于oc对象)。

        3.copy:release旧值,copy新值(一般用于NSString *);

      2>控制是否生成getter和setter

        1.readonly:只会生成getter。

        2.redawrite:同时生成getter和setter。

      3>多线程管理

        1.atomic:性能低(默认)。

        2.nonatomic:性能高。

      4>控制set方法和get方法的名称

        setter:设置set方法的名称,一定有个冒号:因为冒号是方法的一部分。

        getter:设置get方法的名称。

    五、autorelease

      1>autorelease

        1.给某个对象发送一条autorelease消息时,就会将这个对象加到一个自动释放池中。

        2.当自动释放池销毁时,会给池子里面的所有对象发送一条release消息。

        3.调用autorelease方法时不会改变对象的计数器,并且返回对象本身。

        4.只有当pool释放时,该pool的对象才会被依依release。

     在程序运行过程中,可以创建多个自动释放池,它们是以栈的形式存在内存中。  

    参考:  https://www.cnblogs.com/comcn/p/4353226.html

    相关文章

      网友评论

          本文标题:ARC

          本文链接:https://www.haomeiwen.com/subject/bsngyqtx.html