Я уверен, что мне не хватает фундаментального понимания управления памятью iOS, и, несмотря на большое чтение и поиск, я все еще не понимаю его.
Я использую в своем приложении синглтон, которыйсодержит информацию о пользователе, который в данный момент вошел в него, информацию, доступную из нескольких контроллеров представления и т. д. Он имеет несколько иваров, которые получают и устанавливают в приложении.Они объявляются и присваиваются в файле .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, которые не могут быть сохранены, но это также происходит со свойствами объекта.
Что я тут не знаю?И спасибо за ваше терпение.