我一直在通過我的第一個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