6

Xcode 4.6 をインストールしたばかりですが、管理している古いコードで新しいエラーが発生しています。

コンパイラは、「object_setClass() および object_getClass() を支持して、objective-c の isa への直接アクセスは推奨されていません」と不平を言い、プロジェクトはビルドされません。

だから教えてください、は:

object_setClass(self, [CustomClass class]);

以下の適切な置換:

self->isa = [CustomClass class];

ありがとうございました!

4

1 に答える 1

13

アクセスisaはしばらくの間廃止されてきましたが、ツールはこれを教えてくれませんでした。特に、少なくともタグ付きポインターが obj-c に存在する限り、これは推奨されていません。

はい、object_setClass()適切な代替品です。

とはいえ、なぜこれが必要なのですか?オブジェクトのクラスを置き換えることが適切であることは非常にまれであり、私が考えることができる唯一の有効なケースは、クラス全体を変更せずに個々のインスタンスに新しい動作を注入するために、クラスを動的にサブクラス化しようとしている場合です (もちろん、これはおそらく行う必要のないことです)。

于 2013-01-29T19:28:05.700 に答える