Я медленно взбиваю свое первое приложение для iPhone за пределами обучения в контексте книги. То, что я хотел бы иметь, - это единая глобальная переменная, которая отслеживает, есть ли человек, зарегистрированный в приложении. В прошлом с C++ то, что я сделал, объявляется переменной в моем «основном» функциональном файле, а затем повторно объявлено в других файлах как 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, я считаю, что мне приходится выделять и 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];
...
Выход код - 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];
...
}
...
Это, кажется, работает нормально и не вызывает каких-либо ошибок, но смотреть приложение с утечками показывает, что мое заявление распределение утечка памяти где-то , Обычно это происходит, если я выхожу из системы, заставляю «предупреждение о низкой памяти», а затем снова вхожу в систему. Есть ли вопиющие проблемы здесь? Я по-прежнему получаю контроль над управлением памятью, но я думаю, что я довольно близко. Спасибо за любую помощь заранее!
Я пробовал это так и все еще говорил, что есть утечки памяти. Правильно ли назначать и выделять в одной строке? Когда он выходит за пределы области действия в функции, которой он был назначен (хотя у меня есть глобальная ссылка), утечки бросают ложный положительный результат на утечку памяти? Я немного смущен, если я даже делаю что-то неправильно здесь, или если это утечка, я должен напрягаться. Мне бы хотелось, чтобы у вас была утечка, но я почти не вижу, чтобы это произошло. – jocull
трудно сказать что-нибудь окончательное, не зная, что скажет вам утечка. Утечки не идеальны, но, по моему опыту, он справляется с такими глобальными глобалами (многие люди делают синглтоны как глобальные, очень похожие на это). И да, alloc/init и назначить в одной строке нормально. –
Я должен посмотреть, не могу ли я преследовать его тогда ... – jocull