我一直在慢慢地浏览我的第一个iPhone应用程序,而不是在一本书的背景下学习。我想要的是一个单一的全局变量,用于跟踪是否有人登录到应用程序。在过去使用C ++时,我所做的是在我的“main”函数文件中声明一个变量,然后在我的其他文件中将其重新声明为 extern 。我用Objective-C尝试了这个,但是在使用Leaks进行调试时遇到了内存管理问题。这是我正在尝试使用的代码。
主要 文件
#import "clsPerson.h"
clsPerson *LoggedInPerson = nil;
int main(int argc, char *argv[]) {
//...main code...
}
[App] _Prefix.pch * - 前缀文件
...
#import "clsPerson.h"
extern clsPerson *LoggedInPerson;
...
登录代码 - 登录视图控制器(Root上的模态弹出窗口)
我还应该在这里提一下,它目前检查变量是否为 nil 。如果是,那么它会强制您登录。为了使用nil,我相信我必须使用alloc和dealloc而不是重用相同的内存地址?
...
LoggedInPerson = [[clsPerson alloc] initWithJSON:(NSDictionary*)Network.JsonValues];
[LoggedInPerson retain]; //I don't really know if this is needed?
//Save this person into the default settings for next time
[LoggedInPerson saveUserInfo];
[[self parentViewController] dismissModalViewControllerAnimated:YES];
...
退出代码 - 根视图控制器
...
- (void)btnLogoutTapped {
[LoggedInPerson dealloc]; //There is only one object, so I tried to force it to dealloc fully
LoggedInPerson = nil;
[clsPerson ClearUserInfo];
...
}
...
这似乎工作正常并且不会产生任何错误,但是使用Leaks观看应用程序会显示我的分配语句正在某处泄漏内存。如果我退出,强制“低内存警告”,然后再次登录,通常会发生这种情况。这里有明显的问题吗?我仍在掌握内存管理,但我认为我非常接近。感谢您提前提供任何帮助!
答案 0 :(得分:0)
因此,如果您刚刚分配了对象,则无需保留该对象。保留计数已经是+1。
但另一个问题是,当用户注销时,你应该释放,而不是解除分配。你永远不应该直接调用dealloc。