![](/img/trans.png)
[英]UIImagePickerController delegate method not called (delegate set to self)
[英]iOS : dealloc is not getting called if strong delegate set to self
說,我有一個UIView
類型的類(例如“ MyClass”),我在其中聲明了一個用於類委托的,用於處理事件的類型(nonatomic, strong)
類型(nonatomic, strong)
的屬性,該類將觸發該類。
應用程序啟用了ARC,並且在我發現一些有趣的東西時工作得很好,我在我的一個視圖控制器(說TempViewController)中放置了dealloc,在其中我將MyClass
委托設置為self
。 每當我從TempViewController彈出時,它都應該調用其dealloc方法,但不是。 我不知道為什么,但是不知道,我為其他類放了dealloc,它們都被調用了。
然后我發現它沒有在TempViewController中調用,因為我已經設置了MyClass委托。 我也對其他類進行了測試,然后停止調用dealloc。
后來我更改,將屬性委托給, assign
而不是strong
,盡管它再次可以正常工作。
我發現的另一種解決方案是,通過在viewDidDisappear
設置nil
(就像我們對MKMapView
或UIWebView
所做的那樣),它將為同一TempViewController類調用dealloc。
是什么原因引起的? 有什么幫助,建議嗎?
這也意味着您仍在保留或引用Another類的屬性,並且編譯器無法為該類調用dealloc方法。 如果完成,則將其設置為nil,或者為其指定一個弱引用。 嘗試也閱讀這個答案
這是因為您聲明該屬性為strong
,然后將其更改為weak
。
@property (nonatomic, weak) id<yourprotocol> delegate;
如果您將強大的財產授予您的代表,則會增加保留人數。 當您從導航隊列彈出時,它也會減少保留數。 因此,即使you pop
視圖控制器,它也可以通過委托(如果強大)來保留計數。 您的dealloc僅在保留計數為0時得到調用
注意:在“消失”中將nil
設置為委托時,通過setter method
分配的委托decrease
保留計數,並將nil分配給委托。 這就是為什么當設置為nil時它會被調用。
所以,你可以聲明委派為weak
像
@property (nonatomic, weak) id<Protocol> delegate;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.