0

アプリケーションのメモリ管理に問題があります。NSViewクラスを割り当てて、それを自分のWindowsの1つに配置します。しばらくして、スーパービューからオブジェクトを削除し、その場所に別のオブジェクトを配置します。私が抱えている問題は、メモリを削除してもメモリが解放されないことです。以前に保持していたのと同じ量のメモリを保持し続け、そのクラスをさらに追加すると、メモリに蓄積され続けます。私の質問は、そのオブジェクトを削除すると、オブジェクトが削除された後でも、クラスが保持していたすべてのオブジェクトが削除されるのでしょうか、それとも一部のポインターが保持されているのでしょうか?必要に応じてコードを投稿できます。

ありがとう!

編集:これが私がそれを割り当てるために使用するコードです

MyClass *theClass1 = [[MyClass alloc] initWithFrame:frameRect];
[self.window.contentView addSubview:theClass1];

これが私がそれを割り当て解除するために使用するコードです

[[self.window.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

私はそれをタイマーで作成し、毎分更新します。私はそれを他のどこにも参照していません。

4

1 に答える 1

1

各オブジェクトのメモリは、クラスのインスタンスごとに個別に処理する必要があります。1つのインスタンスを削除しても、他のインスタンスの割り当てに影響はありません(クラスの他のインスタンスを探すカスタムコードがない限り)。

NSViewの削除に関してremoveFromSuperviewは、レシーバーを解放します(ビューは削除されます)。そのため、Appleのドキュメントでは、NSView後でretain必要になった場合にレシーバーについて説明しています。

宣言され、インスタンス化され、追加され、削除された場所にコードを投稿すると、より具体的な回答が得られます。

于 2012-08-31T17:58:40.763 に答える