0

ストレージ メモリ割り当てのバグを追跡しようとしていたので、クラスの保持メソッドと解放メソッドをオーバーライドしました。このクラスのインスタンスを別のプロパティに割り当てると、オブジェクトの保持カウントが増加することに気付きましたが、再定義した保持は呼び出されませんでした。

これはどのように可能ですか?保持を呼び出さずにオブジェクトを保持する (保持する) プロパティはありますか?

4

4 に答える 4

3

私のマシンでは、オーバーライドされたものretainが呼び出されました。(私は 10.6.4 を使用しています。これは GCC 4.2.1 と clang 1.5 の両方で確認しました。) コードを投稿していただけますか?

内部的には、retainプロパティの合成されたセッターは を使用します。objc_setPropertyそのソース コードはこちらから入手できます。ご覧のとおり、最終的に[newObject retain]はプロパティが を使用するときに呼び出されますretain

于 2010-08-13T00:45:34.030 に答える
0

self (self. yourproperty ) を使用しない場合、保持カウントは増加しません。

于 2012-07-16T23:52:31.293 に答える
0

ガベージ コレクションはオンになっていますか? retainGCで呼び出されるとは思わない。

于 2010-08-13T01:00:54.350 に答える
-1

合成されたプロパティが保持または解放を呼び出さずに保持カウントを変更しても、私は驚かないでしょう。

于 2010-08-12T23:51:48.353 に答える