0

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

這似乎很好地工作,不會產生任何錯誤,但該應用觀看與泄漏顯示,我的配置語句某處泄漏內存。通常情況下,如果我註銷,強制執行「內存不足警告」,然後重新登錄。這裏有什麼明顯的問題嗎?我仍然在掌握內存管理方面的經驗,但我認爲我非常接近。感謝您提前提供任何幫助!

回答

0

因此,如果您剛剛分配了對象,則不需要保留該對象。保留數將已經爲+1。

但是,另一個問題是你應該在發佈它當用戶註銷,而不是釋放它。你不應該直接調用dealloc。

+0

我已經試過,並且仍然告訴我存在內存泄漏。在同一行中分配和分配有效嗎?當它被分配到的功能超出範圍時(即使我有全局參考),泄漏是否會對內存泄漏產生誤報?如果我在這裏做錯了什麼,或者如果這是一個漏洞,我應該讓自己緊張起來,我有點困惑。我喜歡無泄漏,但我幾乎看不到它發生。 – jocull 2010-11-07 03:47:04

+0

很難說任何明確的,沒有明顯看到泄漏告訴你什麼。泄漏並不完美,但根據我的經驗,它處理這樣的全局變量(許多人將單身人士視爲一個全局非常類似的人)。是的,分配/初始化和分配在一行是正常的。 – 2010-11-07 04:04:20

+0

我得看看我是否不能把它追到那麼...... – jocull 2010-11-07 04:35:40

相關問題