亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么使用弱指針進行委派?

為什么使用弱指針進行委派?

Qyouu 2019-10-17 10:18:52
我不明白為什么用弱指針定義委托是正確的:@property (nonatomic,weak) id delegate;我不明白為什么沒有必要保留對委托的引用...我不希望釋放用作委托的對象...因此,我寧愿使用強引用而不是弱!在許多情況下,委托是將要創建類實例的對象,在這種情況下,創建弱引用將是避免保留周期的好方法...但是如果我選擇完全不同的對象作為委托,該怎么辦? ?我搜索了有關堆棧溢出的其他問題,但找不到任何可以幫助我完全理解這種情況的問題。
查看完整描述

3 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

對象弱保留其委托的原因是為了避免保留周期。想象一下以下情形:對象a創建b并保留它,然后將其自身設置為 b的委托。a由其所有者釋放,留下包含a和的保留周期b。這實際上是非常普遍的情況??紤]一個擁有一個視圖并充當該視圖的委托的視圖控制器。在這種情況下,視圖不應保留控制器-作為適當的MVC體系結構的主旨并防止保留周期。


查看完整回答
反對 回復 2019-10-17
?
米琪卡哇伊

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。


查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 645 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號