こんにちは、みんな、
@property (nonatomic, assign) NSInteger myindex;
この行は、Objective C ARC への変換を実行した後にunsafe_unretainedに変わります。これについて説明してください。
_unsafe_unretained は変数修飾子です。
__unsafe_unretained は、参照先のオブジェクトを存続させず、オブジェクトへの強い参照がない場合に nil に設定されない参照を指定します。参照するオブジェクトの割り当てが解除された場合、ポインターはぶら下がったままになります。
簡単に言えば、この修飾子を使用すると、保持は行われず、保持しているオブジェクトが他にない場合でも、参照が自動的に nil に設定されることはありません。
まず最初に、問題の変数はプリミティブ型 ( 、NSIntegerlikeなど) です。したがって、、、などの変数修飾子はそれらに影響を与えません。したがって、以下のコードに危険はありません。CGFloatfloat__weak__strong__unsafe_unretained
@property (nonatomic, assign) NSInteger myindex;
他の部分に、NSString、UIImage などの非プリミティブ型があり、この修飾子を使用している場合は、使用中は変数を保持し、後で解放する必要があります。
あなたの場合、unsafe_unretainedそれはスカラー値であるため、変更されません。おそらくあなたは次のように書きました:
@property (nonatomic, assign) NSInteger *myindex;
に変換しているのはそのためunsafe_unretainedです。
ARCassignでは効果的unsafe_unretainedです。
、 などのスカラー値のint場合float。それ自体を使用できますassign。weakまたはのいずれかを使用できるオブジェクトの場合unsafe_unretained、コンテキストによって異なります。
unsafe_unretainedオブジェクトの保持をweak防ぎますが、方法は少し異なります。
weakオブジェクトの割り当てが解除されると、オブジェクトへのポインターは nil に変換されます。unsafe_unretained割り当てが解除された後でも、オブジェクトがあったメモリを指し続けます。これにより、割り当てが解除されたオブジェクトへのアクセスが原因でクラッシュが発生する可能性があります。