[英]Presenting a non-arc ViewController from within an arc ViewController
[英]convertion of a class to arc from non-arc
大家好,
@property (nonatomic, assign) NSInteger myindex;
執行轉換為目標 C ARC 后,此行更改為unsafe_unretained任何人都可以對此進行解釋。
_unsafe_unretained 是一個變量限定符。
__unsafe_unretained 指定一個引用,該引用不會使被引用的對象保持活動狀態,並且在沒有對該對象的強引用時不設置為 nil。 如果它引用的對象被釋放,則指針懸空。
簡單地說,如果你使用這個限定符,它不會為你做任何保留,並且當沒有其他對象保留它時,它不會自動將它的引用設置為 nil。
首先,有問題的變量是原始類型( NSInteger
,如CGFloat
、 float
等)。 所以像__weak
、 __strong
、 __unsafe_unretained
這樣的變量限定符對它們沒有影響。 所以下面的代碼沒有危險。
@property (nonatomic, assign) NSInteger myindex;
現在,如果在其他一些部分,您有一個非原始類型,如 NSString、UIImage 等,帶有這個限定符,那么您必須確保在整個使用過程中保留該變量,並在之后釋放它們。
在您的情況下,它不會更改為unsafe_unretained
因為它是一個標量值。 可能你這樣寫:
@property (nonatomic, assign) NSInteger *myindex;
這就是它轉換為unsafe_unretained
的原因。
在 ARC 中assign
實際上是unsafe_unretained
。
對於int
、 float
等標量值。 您可以使用assign
本身。 對於對象,您可以使用weak
或unsafe_unretained
,這取決於上下文。
unsafe_unretained
和weak
防止對象的保留,但方式略有不同。
weak
指針的對象當對象被釋放,將轉換到零。unsafe_unretained
將繼續指向對象所在的內存,即使在它被釋放之后也是如此。 由於訪問該釋放的對象,這可能導致崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.