質問があります。この質問に対する非常に簡単な解決策があるかもしれませんが、私はまだそれを理解することができません. プロパティを使用する場合は、と言い@property(nonatomic, retain)UIView *mainView
ます。
これを .m ファイルに合成し、次のように dealloc メソッドで解放します。
- (void)dealloc {
[mainView release], mainView = nil;
[super dealloc];
}
次に、私viewDidLoad
はそれを割り当てて、次のような私のself.view
ようなサブビューとして追加しています:
- (void) viewDidLoad {
mainView = [[UIView alloc] init];
.
.
.
[self.view addSubView: mainView];
}
mainView
この時点で、 3 つの参照カウント (1 つは alloc から、1 つは保持されたプロパティであるため、3 つ目は に追加したときself.view
) があり、その親コントローラーもそれを所有することを理解しています。さて、私の質問は、自分のビューをself.viewに追加した後、次を使用してmainViewを解放するかどうかです
[mainView release];
既に割り当て解除されたオブジェクトにリリースを送信しているため、前のビューに戻るとアプリがクラッシュします。ここで私の質問は、ここで自分の見解をどのように過剰にリリースしているのかということです。次のコードを使用すると正常に動作し、クラッシュが発生しないため、何が欠けていますか。
- (void) viewDidLoad {
UIView *newView = [[UIView alloc] init];
self.mainView = newView;
[newView release];
.
.
.
[self.view addSubView: mainView];
}
この 2 番目の viewDidLoad メソッドが機能する理由はわかっていますが、最初のメソッドが失敗する理由はわかりません。右?
注:最初のviewDidLoadでは、autoreleaseメソッドを使用してivarに割り当てられているビューを解放でき、クラッシュしないことを理解していますが、要点はautoreleaseの使用を可能な限り削減しようとしていることです。そして、私はARCをまったく使用していません
説明と提案をいただければ幸いです。