Синглтоны iOS и управление памятью

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

Что Я здесь не в курсе? И спасибо за терпение.

9
задан Matthew Frederick 19 November 2010 в 04:24
поделиться