私はログインビューを実装しています。このビューは、いつでも私のアプリケーションに表示する必要があります。静的アナライザはshowLogin上の潜在的な漏れがあることを私に語っているObjC:自分自身を解放するクラスを適切に実装する方法は?
@implementation LoginController
@synthesize releaseOnClose;
+ (void)showLogin {
LoginController *login = [[LoginController alloc] init];
login.releaseOnClose = YES;
[login show]; // Potential leak of login object
}
- (id)init {
if (self = [super initWithNibName:@"Login" bundle:[NSBundle mainBundle]]) {
releaseOnClose = NO;
}
return self;
}
- (void)show {
if (self.view.superview == nil) {
// show the view
}
}
- (void)btnCloseTouched {
[self.view removeFromSuperview];
if (releaseOnClose) {
[self release];
}
}
、しかし:だから、それは簡単に私がshowLoginというクラスメソッドを作成し、ビューは私はそれが自分自身を解放したい閉じたときに、私はこれをしなかっ作ります実際には、私はbtnCloseTouchedでオブジェクトをリリースしていないので(これは単に開いたり閉じたりするために、ログインビューの他の機能については心配しないでください)。
私はどのようにこの潜在的なリークメッセージを避けるためにどのようにこの種の適切なメモリを正しく処理するクラスのメソッドを実装する方法を知りたいですか?
アイデア
私が考えたものについてもう少し。私はshowLoginを呼びたいと思っていました。呼び出し元がインスタンスを管理する必要なく、閉じられるまで存在します。
私は2番目の部分を取得しません。 btmCloseTouchedのselfは正しいインスタンスです。しかし、他の部分について同意する。 – Eiko
自己!= LoginController * login = [[LoginController alloc] init];しかし、。 'login'を含むオブジェクトの正しいインスタンスかもしれませんが、同じインスタンスではありません。とにかく、コードは本当に混乱している - それは欠陥がある。 – xil3
@ xil3クラスメソッドがインスタンスに表示するように指示してから、インスタンスがクローズ(および解放)するアクションを受け取るように見えます。それは間違いなく間違いですが、実行可能なようです。 – Richard