1

「objc_setAssociatedObject」を使用してオブジェクト/キーを NSObject に関連付けたことがなく、「objc_getAssociatedObject」を呼び出した場合、これは安全ですか?

シミュレーターでテストしましたが、クラッシュしませんが、確認したいと思います。

そして、私が電話をかけるとき:

 objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);

NSObject が解放されたときに、NSObject に関連付けたオブジェクトは解放されますか? (私はARCを使用しています)。

4

1 に答える 1

4

適切な関連付けがない場合は、objc_getAssociatedObjectが返されnilます。

オブジェクトを関連付けると、最後の引数で指定されたセマンティクスが使用されます。たとえばOBJC_ASSOCIATION_RETAIN、オブジェクトを保持するため、関連付けが行われている限り割り当てが解除されません。

関連付けを保持するオブジェクト ( の最初のパラメーターobjc_setAssociatedObject) が解放されると、関連付けが解除されます。関連付けが解除されると、保持されていたオブジェクトは解放されます (最初に保持されていた場合)。

したがって、あなたの例では:

objc_setAssociatedObject(self, key, value, OBJC_ASSOCIATION_RETAIN);

value関連付けが解除されるまで保持されます。self割り当てを解除するとき、または関連付けが別の と変更されると、関連付けが壊れobjc_setAssociatedObjectます。

于 2012-09-12T03:01:43.997 に答える