我正在實現一個登錄視圖,我需要這個視圖隨時在我的應用程序中顯示。因此,爲了使其更容易我創建一個名爲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,它會一直存在,直到它關閉而調用者不必管理實例。
我沒有得到第二部分。 self in btmCloseTouched是正確的實例。雖然,同意其他部分。 – Eiko 2011-01-05 14:17:38
self!= LoginController * login = [[LoginController alloc] init];雖然。它可能是包含'login'的對象的正確實例,但它不是同一個實例。無論如何,代碼真的很混亂,因爲它是有缺陷的。 – xil3 2011-01-05 14:28:14
@ xil3它看起來像類方法告訴實例顯示,然後實例接收關閉(和釋放)的動作。這絕對是奇怪的,但似乎可行。 – Richard 2011-01-05 15:16:16