1

最後の 2 時間、自分のコードに頭をぶつけて、コードの何が問題だったのかを突き止めようとしました。最終的には、1 組のラインに絞り込みました。

NSArray *components = [string componentsSeparatedByString:@" "];

if ([components count] > 1){                        
    retainedProperty1 = [header objectAtIndex:0];

    retainedProperty2 = [header objectAtIndex:1];
}

実行の遅延後にこれらのフィールドのいずれかにアクセスしようとすると (私はCocoaAsyncSocketを使用しており、ソケットからの 2 回目の読み取りでこのオブジェクトに必要な残りのデータを取得します)、それらは両方とも次のようになります。ゾンビ。どうしてこんなことになってしまったんだろう?

4

1 に答える 1

5

あなたは自分自身に嘘をついています。あなたは言ってretainedProperty1 = ...いますが、実際にはプロパティではなく ivar に割り当てています。ARC を使用していない限り (そして、ARC を使用していない場合、またはこの問題が発生しない場合)、これはメモリ管理をまったく行いません。この ivar の以前の値を解放することさえできません。あなたは言うべきです

self.retainedProperty1 = ...
self.retainedProperty2 = ...
于 2012-07-18T00:09:30.557 に答える