在ARC下,讓每個IBOutlet成爲一個屬性有什麼意義?對於僅在視圖控制器內部使用的IBOutlets使用ivars有什麼缺點?在ARC下使用IBOutlets屬性的有用性?
回答
如果您不使用setter/getter方法進行任何操作,請不要依賴這些屬性的鍵值觀察,也不要預期子類會從覆蓋這些屬性中受益,那麼就沒有真正的在ARC下使用IBOutlets的ivars的缺點。
謝謝,ivars會在我的代碼中消除很多'self.'前綴。 –
請查看我的答案,並讓我知道你是否對任何事情有所瞭解。 –
我一直在爲我的「私人」IBOutlets使用ivars,並遇到內存泄漏問題。我認爲這是因爲我的IBOutlets使用__unsafe_unretained
屬性而不是__weak
。我不能使用__weak
,因爲它不支持iOS 4(我希望我的應用程序與iOS 4向後兼容)。很難掌握ARC,IBOutlets,viewDidUnload以及所有這些混亂情況的真實情況。唉...
總之,當我將IBOutlets從ivars更改爲屬性時,內存泄漏問題就消失了。
因此,要回答我自己的問題,使用IBOutlets的ivars的一個缺點是,如果您擁有__unsafe_unretained
屬性,則可能會遇到內存泄漏。
這不可能是你的泄漏源頭。如果你的網點是'__unsafe_unretained',那麼根據定義,這些ivars沒有保留它們的目標,*不保留*某件東西永遠不會導致泄漏。 (它可能導致崩潰,但這是另一回事。)你沒有指定你添加的屬性是否同樣是'unsafe_unretained',但無論哪種方式,通過添加屬性你可以做的唯一的事情就是*更多*保留。沒有更多的細節,不可能說出你爲什麼泄漏。如果你真的好奇,你可以提交另一個問題。 –
我添加的屬性確實是'unsafe_unretained'。我真的很困惑,爲什麼將IBOutlets從ivars更改爲屬性會產生變化。也許我沒有正確解釋XCode的儀器。 –
unsafe_unretained可能會導致崩潰,但不會導致泄漏。我會說你正在解釋器械錯誤。抱歉。 :)但那就是說,現在已經有好幾個月了:你對所發生的事情有更多的瞭解嗎? –
- 1. ARC屬性的新屬性
- 2. 使用ARC在init內設置屬性?
- 3. 是否需要使用ARC的UIView屬性的retain屬性?
- 4. 使用ARC的Objective-C屬性
- 5. 載入具有零IBOutlets屬性
- 6. 使用ARC時重新分配屬性
- 7. 保留CTFrameRef屬性使用ARC
- 8. 使用ARC是否NSMutableArray需要屬性?
- 9. ARC宣佈的屬性屬性 - 瞭解
- 10. ARC和nill屬性
- 11. 迭代UIViewController的屬性和IBOutlets
- 12. Objective-c屬性沒有在ARC下發布
- 13. 更新與ARC屬性啓用
- 14. 爲什麼使用ivars代替IBOutlets屬性?
- 15. Wikitude - 「弱」屬性的@synthesize只允許在ARC或GC模式下使用
- 16. 我應該使用屬性和塊/ ARC的弱引用嗎?
- 17. ARC和弱IBOutlet屬性
- 18. Swift如何在屬性屬性中實現ARC?
- 19. 在@synthesis屬性中使用屬性= ivar
- 20. 如何保持IBOutlet屬性不被釋放(使用ARC的iOS)
- 21. 在ARC下的頭文件中聲明IBOutlets的正確方法?
- 22. 在不調用getter的情況下讀取屬性屬性?
- 23. 使用屬性
- 24. 使用屬性
- 25. 使用屬性
- 26. 使用ul下拉的必需屬性
- 27. 使用屬性和性能
- 28. 在ARC下是否有屬性設置器形式的官方文檔?
- 29. Objective-C的ARC屬性重複混亂
- 30. ARC下的-viewDidUnload中的弱和強屬性
你爲什麼認爲必須創建屬性? – Phlibbo
@Phlibbo:我一直在這裏和那裏看到,這是「良好的做法」,並簡化了viewDidUnload代碼。 –
我希望有一本類似於Scott Meyers和Herb Sutter爲C++編寫的書的「有效的iOS」書。 –