Я уверен, что мне не хватает фундаментального понимания управления памятью iOS, и, несмотря на много чтения и поиска, я все еще не понимаю его.
Я использую синглтон в своем приложении, в котором есть информация о пользователе, который в данный момент вошел в него, информация, доступная из нескольких контроллеров представления, и т. Д. У него есть несколько ivar, которые устанавливаются и устанавливаются в приложении. Они объявляются и присваиваются им в файле .h следующим образом:
NSString *myString;
и сохраняются, например, так:
@property (non atomic, retain) NSString *myString;
, и синтезируются в реализации.
Я получаю и устанавливаю их значения в методах синглтона следующим образом:
myString = @"value";
и
methodLocalString = myString;
В других местах я включаю синглтон - назовите его CurrentUser - я импортирую его:
#import "CurrentUser.h"
Вне синглтона я получаю и устанавливаю его следующим образом:
[CurrentUser sharedCurrentUser].myString = @"Bob";
и
myOutsideString = [CurrentUser sharedCurrentUser].myString;
В большинстве случаев это отлично работает, при этом значения соответствующим образом сохраняются от одного получения или настройки к другому. Проблема в том, что иногда, когда я получаю их таким образом, я обнаруживаю, что они были выпущены (сбой приложения), что, к счастью, сообщает мне NSZombieEnabled.
Я не понимаю, как это могло случиться. Я думал, что синглтон так и не был выпущен, и поэтому сохраненные свойства синглтона никогда не будут выпущены. Я' Замечу, что проблема, по-видимому, чаще встречается с нереальными свойствами объекта, такими как NSDate, и свойствами определенно не объектами, такими как int и BOOL, которые нельзя сохранить, но это также происходит со свойствами объекта.
Что Я здесь не в курсе? И спасибо за терпение.