私が引き受けたプロジェクトでは、元の作者が使用することを選択しましたがobjc_setAssociatedObject()
、それが何をするのか、なぜ彼らがそれを使用することにしたのか、100%明確ではありません。
私はそれを調べることにしましたが、残念ながら、ドキュメントはその目的についてあまり説明していません。
objc_setAssociatedObject
指定されたキーと関連付けポリシーを使用して、指定されたオブジェクトに関連付けられた値を設定します。
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)
パラメータ
object
関連付けのソースオブジェクト。
key
協会の鍵。
value
オブジェクトのキーキーに関連付ける値。nilを渡して、既存の関連付けをクリアします。
policy
協会の方針。可能な値については、「関連オブジェクトの動作」を参照してください。
では、この関数は正確に何をし、どのような場合に使用する必要がありますか?
回答を読んだ後に編集する
では、次のコードのポイントは何ですか?
Device *device = [self.list objectAtIndex:[indexPath row]];
DeviceViewController *next = [[DeviceViewController alloc] initWithController:self.controller
device:device
item:self.rootVC.selectedItem];
objc_setAssociatedObject(device, &kDeviceControllerKey, next, OBJC_ASSOCIATION_RETAIN);
デバイスがすでにインスタンス変数である場合、デバイスをView Controllerに関連付けることのポイントは何ですか?