【发布时间】:2011-06-04 00:43:40
【问题描述】:
我正在实现一个登录视图,我需要在我的应用程序中随时显示此视图。因此,为了更容易,我创建了一个名为 showLogin 的类方法,当视图关闭时,我希望它自行释放,所以我这样做了:
@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 中释放了对象(不要担心登录视图的其他功能,现在它只是打开并关闭)。
所以我想知道如何避免这种潜在的泄漏消息以及如何正确实现这种 if 类方法来正确处理内存?
理念
更多关于我的想法。我想调用 showLogin,它会一直存在,直到它关闭,而调用者不必管理实例。
【问题讨论】:
标签: objective-c xcode ios memory-management