Правильное управление хранилищем данных Singleton в IOS с помощью веб-службы - PullRequest
0 голосов
/ 10 августа 2011

В настоящее время я использую синглтон в качестве хранилища данных для своего приложения. По сути, я храню ряд событий, которые извлекаются и анализируются из веб-службы, а затем добавляются по мере необходимости. Каждый раз, когда я делаю запрос от веб-службы, я анализирую результаты и проверяю, существуют ли уже элементы. Если они это сделают, я удаляю их и добавляю обновленную версию, предоставленную веб-сервисом.

Казалось, что все работает правильно, пока я не запустил панель «Инструменты», чтобы выяснить, что моя система пропускает объекты каждый раз, когда загружает их из веб-службы (начиная со второго раза). Основной метод, где вещи, кажется, портятся, это тот, который находится в моем синглтон-классе HollerStore:

- (void)addHoller: (Holler *)h
{
    //Take a holler, check to see if one like it already exists
    int i = 0;

    NSArray *theHollers = [NSArray arrayWithArray:allHollers];
    for( Holler *th in theHollers )
    {
        if( [[th hollerId]isEqualToString:[h hollerId]] )
        {
            NSLog(@"Removing holler at index %i", i);
            [allHollers removeObjectAtIndex:i];
        }
        i++;
    }
    [allHollers addObject:h];
}

Краткое объяснение: я решил скопировать allHollers NSMutableArray в theHollers, потому что он обновляется асинхронно с помощью NSURLConnection. Если я обновлю его напрямую, это приведет к сбою. Поэтому я переключился на эту модель в надежде решить проблему, однако панель «Инструменты» сообщает мне, что мои объекты протекают. Все подсчеты - это количество элементов, которые у меня есть в моем наборе данных.

Из того, что я могу сказать, removeObjectAtIndex не эффективно удаляет элементы. Хотелось бы узнать мысли кого-то еще о трех вещах:

  1. Правильно ли сделан мой анализ, что что-то еще должно сохранять добавленные отдельные крики?
  2. Должен ли я использовать CoreData или SQLite для хранения информации, извлеченной из веб-службы?
  3. Знаете ли вы, как долго должны храниться данные, хранящиеся в синглтоне? Пока приложение не будет убито?

Обновление Я думаю, что нашел источник, однако, возможно, кто-то может дать некоторую ясность относительно правильного способа сделать это. Я создал метод parseHoller, который принимает объект словаря, созданный с помощью SBJSON, и возвращает мою собственную модель (Holler). Вот последние несколько строк:

Holler *h = [[[Holler alloc] initFromApiResponse:hollerId 
                                       creatorId:creatorId 
                                     creatorName:creatorName 
                                 creatorImageUrl:creatorImage 
                                        comments:comments 
                                       attendees:attendees 
                                          wishes:wishes 
                                        invitees:invites 
                                       createdAt:createdAt 
                                            text:text 
                                           title:title 
                                            when:when]autorelease];
//(some other autorelease stuff is here to clean up the internal method)
return h;

Я подумал, что, поскольку я возвращаю объект, выпущенный автоматически, это должно быть хорошо. Вы видите что-то не так с этим?

1 Ответ

0 голосов
/ 10 августа 2011

Вы пытались сделать подсчет сохраняющихся объектов?Может быть, это могло бы прояснить, когда или где это сохраняется.Код должен быть

[putObjectHere retainCount];

, а затем записать в NSLog

Надеюсь, он даст вам что-то

Питер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...