我正在使用第三方Objective-C庫在後臺線程中發出Web請求,然後使用[self performSelectorOnMainThread:...]
返回結果,然後調用委託方法。我知道我需要在發佈委託前委託引用nil
,但我想知道如果在後臺線程運行時請求對象本身被取消分配會發生什麼。此內部self
參考值是否設置爲nil
,以便-performSelectorOnMainThread:
調用是無害的,還是有可能導致崩潰?自我釋放
Q
自我釋放
2
A
回答
2
據我瞭解你的情況(但可能你應該包括一些代碼),聲明:
[self performSelectorOnMainThread:...]
應該在你的線程中執行的最後一個(因爲它是返回的路上你的線程的結果,它仍然是傳遞給NSThread
的線程選擇器的一部分)。
如果是合理的話,那麼考慮當你第一次分離的NSThread
,你傳遞一個target
對象(您self
),並只要通過selector
尚未完成NSThread
將retain
它。這將包括你的[self performSelectorOnMainThread:...]
,所以,除非有人用releases
大量混亂,否則self
在[self performSelectorOnMainThread:...]
執行之前不應該被釋放。
如果您的問題確實如果有人與releases
混淆會發生什麼,我會再次考慮這一點。
2
如果在主線程上的方法完成之前解除分配了對象,則會出現內存管理問題。 performSelectorOnMainThread:…
方法家族使得接收者在完成其工作之前一直保留下來,所以解除分配的唯一方式是如果你過度釋放對象。
相關問題
- 1. self removeFromSuperView不釋放自我?
- 2. 自動釋放與釋放
- 3. 我們可以做[自我釋放];?
- 4. 自動釋放和釋放功能
- 5. 釋放或自動釋放的對象
- 6. MKReverseGeocoder自動釋放/釋放問題
- 7. 釋放後釋放的自由堆塊
- 8. 關於自動釋放/釋放和[池釋放]
- 9. 我可以自動釋放NSOperationQueue嗎?
- 10. 如何在touchesEnded中釋放自我(UIImageView)?
- 11. 我應該在iPhone OS中排放還是釋放一個自動釋放池?
- 12. 自動釋放CGMutablePathRef?
- 13. 發送removeFromSuperview自我沒有釋放自己在我的情景
- 14. 使用[自我釋放],[自我保留]是好方法嗎?
- 15. 釋放返回的對象還是我必須使用自動釋放
- 16. 保留一個自動釋放變量,我在哪裏釋放它?
- 17. 自動釋放池dillema
- 18. 外部自動釋放池
- 19. TableViewCell自動釋放錯誤
- 20. 自動釋放物體
- 21. 自動釋放池塊
- 22. ARC自動釋放過早
- 23. 如何自動釋放CGLayer?
- 24. iOS自動釋放池塊
- 25. UIImageView泄漏/自動釋放
- 26. 自動釋放溺水
- 27. 問題與「自動釋放」
- 28. 自動釋放對象
- 29. 自動釋放池調試
- 30. Objective-C自動釋放池
這就是我缺少的部分(即新線程將保留'self')。謝謝! – jrdioko 2011-06-06 18:30:41