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