(四十六)内存管理的复习

ARC的准则是:只要没有强指针指向对象,就会被销毁。

Tip:不写__weak的都是强指针。


一般对象用strong的目的是为了当前对相在,维护的这个成员也在。

注意循环引用应该一端用weak,一端用strong。

Tip:iOS5以前的retain和现在的strong是一个类型。


一些遗留问题:

1.UI控件的引用使用weak的原因:

控制器的view是强指针指向UIView,UIView内部有一个Subviews数组,这个数组也是强指针,在数组内存放的是对象的指针,也就是有一个强指针指向UI控件。

也就是说控制器在,UIView就在,Subviews在,UI控件就在,因此UI控件用weak和strong都可以。

使用weak能更好的保护内存,能用弱指针尽量用弱指针。


2.代理用weak的原因:

Tip:iOS5以前的assign就相当于现在的weak。

因为一般控件的代理都是控制器,以tableView为例,如果控制器强指针指向tableView,而tableView的代理再强指针指向控制器,就会引发无法释放的问题。

Tip:只要强指针构成环就无法销毁沿途各个对象。


3.copy属性:

复制分为深复制和浅复制(笔试题经常考)。

Tip:笔试常考@property用 copy、weak、strong、assign、retain还有OC语法等。


总结:

weak(原来的assign):代理、UI控件

strong(原来的retain):其他对象(除去字符串以外的普通OC对象)

copy:字符串

assign:非对象类型,基本数据类型,包括结构体和枚举。

原文地址:https://www.cnblogs.com/aiwz/p/6154205.html