假設我用參數中給定的對象分配一個實例var。我不知道這個對象是什麼,所以我不想保留它。但是,我對該對象的引用在某些時候可能是無效的,例如,如果對象被釋放或即將釋放(autorelease池)。所以,在我的類實例中,我可以知道引用我保存到一個實例變量可以使用沒有任何崩潰的風險?iPhone - 有沒有辦法知道引用是否(仍然)有效?
1
A
回答
1
Kris Van Bael是對的,不管你是否知道對象是什麼,如果你想擁有它(如果它是由你來確保對象是活着的),你必須保留它。當您不需要它時釋放它,並將引用設置爲NIL(用於安全性)。
但他們是個例外!
有時你不想擁有所有權,最常見的例子是委託。 你不想保留你的委託,因爲它可能已經保留了你,並且如果兩個對象在dealloc方法中相互釋放,你的應用程序將會泄漏。
但是在這種情況下,你不應該關心被釋放的委託:委託應該設置你的「委託」屬性在它的dealloc方法中爲零。
所以
- 如果你有對象的所有權:保留,別無選擇!
- 如果對象擁有您的所有權:分配,不用擔心!
0
2
您應該保留它並在不再需要時釋放它。這正是保留的目的。
1
這種方法非常危險。如果您的應用程序無法跟蹤對象生命週期,那麼您必須更改代碼才能控制它。 無論如何回答你的問題:你可以通過額外保留你的實例變量來保護你的實例變量,然後在不再需要時釋放它。所以你不需要做你想要的支票。
相關問題
- 1. 是否仍然有效?
- 2. Sharekit是否仍然有效?
- 3. 有沒有辦法知道手機是否有通話?
- 4. 有沒有辦法知道用戶是否發送了短信?
- 5. 有沒有辦法知道Data Saver是否啓用?
- 6. 有沒有辦法知道異常是否被禁用?
- 7. 有沒有辦法知道用戶是否打開郵件?
- 8. Maven有沒有辦法禁用模塊,但仍然讓父母知道它們?
- 9. 有沒有辦法知道文件名是否是Excel格式?
- 10. 有沒有辦法知道timerTask是否已完成?
- 11. 有沒有辦法知道一行是否更新?
- 12. 有沒有辦法知道Flash Player是否安裝了SWFObject?
- 13. 有沒有辦法知道rxjs websocket是否打開
- 14. 有沒有辦法知道ExecutorService是否成功結束?
- 15. 有沒有辦法知道HttpResponse是否在Https中?
- 16. 有沒有辦法知道是否已經創建了IWin32Window?
- 17. 有沒有辦法知道$ http請求是否超時?
- 18. 有沒有辦法讓webpack知道全局是否沒有聲明?
- 19. iOS:有沒有辦法知道用戶是否選擇了退出通知?
- 20. 有沒有辦法確定Firebase用戶的UID是否有效?
- 21. 有沒有辦法知道一個對象的C#方法是否被調用?
- 22. 有沒有辦法仍然調試和Xcode 4
- 23. 有沒有辦法知道SD卡上的目錄是否有任何圖像?
- 24. 典雅地檢查HTTPSession引用是否仍然有效
- 25. 有沒有辦法知道當前域是否啓用地理定位?
- 26. 有沒有辦法知道用戶是否喜歡Facebook上的對象?
- 27. 有沒有辦法知道電子郵件是否用C#成功轉發?
- 28. 有沒有辦法知道客戶是否使用了優惠券代碼?
- 29. 有沒有辦法檢查子進程是否仍在運行?
- 30. 有沒有辦法確定JDBC事務是否有效?
那正是我在尋找的東西。謝謝 ! – Oliver