回答
UIView
的superview
屬性聲明爲
@property(nonatomic, readonly) UIView *superview;
在Objective-C,如果沒有不同所有權說明符
聲明的屬性
assign
默認
strong
默認引進ARC的,然而,該UIKit標題似乎不使用ARC,所以此屬性最像assign
。還要注意,由於該屬性是隻讀的,因此源中最有可能是自定義getter,因此屬性中的所有者說明符不一定會告訴我們任何內容。可以肯定的是,蘋果已經以避免保留週期的方式實現了它。
assign
相當於__unsafe_unretained
,這是一個非歸零弱引用。這意味着它不保留該對象,但當對象被釋放時不會被設置爲nil
。這比weak
具有更高的性能(因爲它不需要檢查和歸零),但是不安全,因爲如果被引用的對象被釋放,您可能正在訪問垃圾內存。
另請注意,該屬性聲明爲readonly
,這意味着它實際上可以實現爲一種方法,該方法返回一個私有實例變量,或完成其他我們不知道的其他內容。基本上,重要的是你可以假設這個屬性不保留它指的對象。
在今天的新代碼中,您應該使用weak
而不是assign
。
在Objective-C中,聲明沒有不同所有權說明符的屬性默認情況下應該是'strong',對吧?我認爲這實際上是因爲'@property(nonatomic,readonly,copy)NSArray * subviews',所以父母不會因爲'copy'屬性而保留子視圖。 – DavidLiu
另外,'assign'屬性不執行任何類型的內存管理。這是基本數據類型的默認行爲。 'assign'不等於'__unsafe_unretained'。 – DavidLiu
@DavidLiu'__unsafe_unretained'和'assign'實際上是相同的,請參見[本答案](http://stackoverflow.com/a/14669490/834998)。 – Greg
- 1. 如何防止綁定到自己導致的保留週期
- 2. 這是如何防止塊保留週期?
- 3. 如何防止這個佈局週期?
- 4. 會導致保留週期
- 5. 遞歸塊保留週期
- 6. ARC,塊和保留週期
- 7. 保留週期:「Parent-Child」
- 8. 通過AFNetworking保留週期
- 9. 保留週期關注
- 10. Cocos2d代表保留週期
- 11. 代表並保留週期?
- 12. iOS ARC塊保留週期
- 13. 在ARC中保留週期
- 14. 塊,自我,保留週期
- 15. 會有保留週期嗎?
- 16. 防止弱分配的變量被釋放而不創建保留週期
- 17. 沒有保留週期,但爲什麼仍然有保留週期警告?
- 18. UIView被保留
- 19. Objective-C阻止「保留週期」警告,不明白爲什麼
- 20. 捕獲「自我」時,弱保留塊如何導致保留週期
- 21. 如何在處理NSArray(默認保留對象)時避免保留週期?
- 22. Objective-C塊的生命週期和保留週期
- 23. 如何避免在iOS上延遲阻止調用的保留週期
- 24. 防止角度運行挖掘週期
- 25. 防止週期和多階路徑
- 26. 刪除節點導致保留週期
- 27. 保留週期CCAction和CCCallFunc/CCCallBlock
- 28. 這是一個保留週期嗎?
- 29. 這是一個保留週期(財產)?
- 30. 有時候保留週期好嗎?
一個參考文獻很薄弱。 – rmaddy
我假設一個參考必須是星期。我怎麼也弄不清哪一個弱。 – DavidLiu
對超視圖的引用很弱。 – rmaddy