我一直在通过我的第一个iPhone应用程序慢慢搅动,除了在一本书的上下文中学习外。我想要的是一个跟踪是否有人登录到应用程序的全局变量。在过去的C++中,我所做的是在我的“main”函数文件中声明一个变量,然后在我的其他文件中重新声明它为extern。我已经用Objective-C尝试过了,但是在调试泄漏时我遇到了内存管理问题。这是我正在尝试使用的代码。Single,global,object instance
主要文件
#import "clsPerson.h"
clsPerson *LoggedInPerson = nil;
int main(int argc, char *argv[]) {
//...main code...
}
[应用] _Prefix.pch * - 前缀文件
...
#import "clsPerson.h"
extern clsPerson *LoggedInPerson;
...
登录代码 - 登录之上 - 视图 - 控制器(模式弹出根)
我在这里还应该提到,它目前检查变量是否为无。如果是,那么它会强制你登录。为了使用零,我相信我必须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];
...
}
...
这似乎很好地工作,不会产生任何错误,但该应用观看与泄漏显示,我的配置语句某处泄漏内存。通常情况下,如果我注销,强制执行“内存不足警告”,然后重新登录。这里有什么明显的问题吗?我仍然在掌握内存管理方面的经验,但我认为我非常接近。感谢您提前提供任何帮助!
我已经试过,并且仍然告诉我存在内存泄漏。在同一行中分配和分配有效吗?当它被分配到的功能超出范围时(即使我有全局参考),泄漏是否会对内存泄漏产生误报?如果我在这里做错了什么,或者如果这是一个漏洞,我应该让自己紧张起来,我有点困惑。我喜欢无泄漏,但我几乎看不到它发生。 – jocull 2010-11-07 03:47:04
很难说任何明确的,没有明显看到泄漏告诉你什么。泄漏并不完美,但根据我的经验,它处理这样的全局变量(许多人将单身人士视为一个全局非常类似的人)。是的,分配/初始化和分配在一行是正常的。 – 2010-11-07 04:04:20
我得看看我是否不能把它追到那么...... – jocull 2010-11-07 04:35:40