カテゴリを介してインスタンス変数を追加できるかどうかを尋ねています。私の特別な問題は、NSIndexPathプロパティをASIHTTPRequestオブジェクトに追加する必要があるが、原則としてASIHTTPRequestをサブクラス化したくないということです。
何か代替手段はありますか?
答えてくれてありがとう、クリスチャン
カテゴリを介してインスタンス変数を追加できるかどうかを尋ねています。私の特別な問題は、NSIndexPathプロパティをASIHTTPRequestオブジェクトに追加する必要があるが、原則としてASIHTTPRequestをサブクラス化したくないということです。
何か代替手段はありますか?
答えてくれてありがとう、クリスチャン
カテゴリは追加のインスタンス変数を宣言できませんが、OS X10.6およびiOS3.1以降、連想参照を使用してこれを回避できます。
連想参照を使用して、既存のクラスへのオブジェクトインスタンス変数の追加をシミュレートできます。連想参照を使用すると、クラス宣言を変更せずにオブジェクトにストレージを追加できます。これはとを介して行われobjc_setAssociatedObject
ますobjc_getAssociatedObject
。これらの呼び出しをプロパティのカスタムゲッターとセッターでラップすると、ivarを偽造できます。
OleBegemannによるこの投稿をご覧ください。