Я медленно перелистывал свое первое приложение для iPhone, не учась в контексте книги. Я хотел бы иметь единственную глобальную переменную, которая отслеживает, есть ли человек, вошедший в приложение. В прошлом с C ++ то, что я делал, объявлялось как переменная в моем «основном» файле функции, а затем повторно объявлялось в других моих файлах как extern . Я пробовал это с Objective-C, но я сталкиваюсь с проблемами управления памятью при отладке с утечками. Вот код, который я пытаюсь использовать.
основной файл
#import "clsPerson.h"
clsPerson *LoggedInPerson = nil;
int main(int argc, char *argv[]) {
//...main code...
}
[Приложение] _Prefix.pch * - Файл префикса
...
#import "clsPerson.h"
extern clsPerson *LoggedInPerson;
...
Код входа - Контроллер вида входа в систему (модальное всплывающее окно поверх Root)
Я должен также упомянуть, что в настоящее время он проверяет, является ли переменная nil . Если это так, то это заставляет вас войти. Я полагаю, что для использования nil нужно выделить и удалить, а не использовать один и тот же адрес памяти?
...
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];
...
Код выхода - Root View Controller
...
- (void)btnLogoutTapped {
[LoggedInPerson dealloc]; //There is only one object, so I tried to force it to dealloc fully
LoggedInPerson = nil;
[clsPerson ClearUserInfo];
...
}
...
Кажется, это работает нормально и не выдает никаких ошибок, но при просмотре приложения с утечками видно, что в моем операторе размещения где-то происходит утечка памяти. Обычно это происходит, если я выхожу из системы, вырабатываю «предупреждение о нехватке памяти», а затем снова вхожу в систему. Здесь есть какие-то явные проблемы? Я все еще хорошо разбираюсь в управлении памятью, но думаю, что я довольно близок. Спасибо за любую помощь заранее!