not available in automatic reference counting mode


現在、rutime.hを使って、それぞれ任意のメソッドを実行できる、任意のプロパティを読み書きできる、インスタンスフィールドを読み書きできるユーティリティをそれぞれ書いているのだが、最後に書いたインスタンスフィールドにアクセスするコードで、どうしてもコンパイルが通らない事象が発生した。

コードはこんな感じ (例外などは省略している)

Object+IvarUtil.m
+ (id)getIvar:(id)target forName:(NSString *)name
{
    Ivar ivar = class_getInstanceVariable(target [name UTF8String]);
    id newVal;
    object_getInstanceVariable(target, [name UTF8String], &newVal);
    return newVal;
}

確かにXcode上で同関数object_getInstanceVariableを選択すると赤線が引かれて使えないことを示唆されるのだが、リファレンスドキュメント等には特に明記されておらず、使えない理由が分らない。

エラー内容からARCが原因であることは間違い無い。引数の型がvoid**であることから、パラメタのオーナシップの移動に関してであろうことは想像に難くないが、「何故」駄目なのかをきちんと知りたいところ。