簡體   English   中英

將類從非弧轉換為弧

[英]convertion of a class to arc from non-arc

大家好,

@property (nonatomic, assign) NSInteger myindex;

執行轉換為目標 C ARC 后,此行更改為unsafe_unretained任何人都可以對此進行解釋。

_unsafe_unretained 是一個變量限定符。

過渡到 ARC 文檔

__unsafe_unretained 指定一個引用,該引用不會使被引用的對象保持活動狀態,並且在沒有對該對象的強引用時不設置為 nil。 如果它引用的對象被釋放,則指針懸空。

簡單地說,如果你使用這個限定符,它不會為你做任何保留,並且當沒有其他對象保留它時,它不會自動將它的引用設置為 nil。

編輯:看到評論后

首先,有問題的變量是原始類型( NSInteger ,如CGFloatfloat等)。 所以像__weak__strong__unsafe_unretained這樣的變量限定符對它們沒有影響。 所以下面的代碼沒有危險。

@property (nonatomic, assign) NSInteger myindex;

現在,如果在其他一些部分,您有一個非原始類型,如 NSString、UIImage 等,帶有這個限定符,那么您必須確保在整個使用過程中保留該變量,並在之后釋放它們。

在您的情況下,它不會更改為unsafe_unretained因為它是一個標量值。 可能你這樣寫:

@property (nonatomic, assign) NSInteger *myindex; 

這就是它轉換為unsafe_unretained的原因。

在 ARC 中assign實際上是unsafe_unretained

對於intfloat等標量值。 您可以使用assign本身。 對於對象,您可以使用weakunsafe_unretained ,這取決於上下文。

unsafe_unretainedweak防止對象的保留,但方式略有不同。

  • weak指針的對象當對象被釋放,將轉換到零。
  • unsafe_unretained將繼續指向對象所在的內存,即使在它被釋放之后也是如此。 由於訪問該釋放的對象,這可能導致崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM