我不明白為什么用弱指針定義委托是正確的:@property (nonatomic,weak) id delegate;我不明白為什么沒有必要保留對委托的引用...我不希望釋放用作委托的對象...因此,我寧愿使用強引用而不是弱!在許多情況下,委托是將要創建類實例的對象,在這種情況下,創建弱引用將是避免保留周期的好方法...但是如果我選擇完全不同的對象作為委托,該怎么辦? ?我搜索了有關堆棧溢出的其他問題,但找不到任何可以幫助我完全理解這種情況的問題。
3 回答
慕村9548890
TA貢獻1884條經驗 獲得超4個贊
對象弱保留其委托的原因是為了避免保留周期。想象一下以下情形:對象a創建b并保留它,然后將其自身設置為 b的委托。a由其所有者釋放,留下包含a和的保留周期b。這實際上是非常普遍的情況??紤]一個擁有一個視圖并充當該視圖的委托的視圖控制器。在這種情況下,視圖不應保留控制器-作為適當的MVC體系結構的主旨并防止保留周期。
米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
這是為了避免保留周期。Apple提供了有關高級內存管理的信息性指南,說明了這種情況以及如何最好地對其進行處理。在ARC中,它們現在稱為強參考周期,在《過渡到ARC發行說明》中對此進行了說明。
以前,您需要像這樣為委托定義屬性,
@property (nonatomic, assign) id delegate;
但是在ARC中,您可以這樣定義它,
@property (nonatomic, unsafe_unretained) id delegate;
或者,例如,如果您有一個名為的協議<MyObjectDelegate>,則還可以通過這種方式定義委托,
@property (nonatomic, weak) id <MyObjectDelegate> delegate;
換句話說,在ARC中,如果您有協議,則可以聲明一個委托weak。否則,unsafe_unretained。
- 3 回答
- 0 關注
- 645 瀏覽
添加回答
舉報
0/150
提交
取消
