3 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
對象弱保留其委托的原因是為了避免保留周期。想象一下以下情形:對象a
創(chuàng)建b
并保留它,然后將其自身設(shè)置為 b
的委托。a
由其所有者釋放,留下包含a
和的保留周期b
。這實(shí)際上是非常普遍的情況??紤]一個(gè)擁有一個(gè)視圖并充當(dāng)該視圖的委托的視圖控制器。在這種情況下,視圖不應(yīng)保留控制器-作為適當(dāng)?shù)腗VC體系結(jié)構(gòu)的主旨并防止保留周期。

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是為了避免保留周期。Apple提供了有關(guān)高級內(nèi)存管理的信息性指南,說明了這種情況以及如何最好地對其進(jìn)行處理。在ARC中,它們現(xiàn)在稱為強(qiáng)參考周期,在《過渡到ARC發(fā)行說明》中對此進(jìn)行了說明。
以前,您需要像這樣為委托定義屬性,
@property (nonatomic, assign) id delegate;
但是在ARC中,您可以這樣定義它,
@property (nonatomic, unsafe_unretained) id delegate;
或者,例如,如果您有一個(gè)名為的協(xié)議<MyObjectDelegate>,則還可以通過這種方式定義委托,
@property (nonatomic, weak) id <MyObjectDelegate> delegate;
換句話說,在ARC中,如果您有協(xié)議,則可以聲明一個(gè)委托weak。否則,unsafe_unretained。
- 3 回答
- 0 關(guān)注
- 635 瀏覽
添加回答
舉報(bào)