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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值