В настоящее время я использую синглтон в качестве хранилища данных для своего приложения. По сути, я храню ряд событий, которые извлекаются и анализируются из веб-службы, а затем добавляются по мере необходимости. Каждый раз, когда я делаю запрос от веб-службы, я анализирую результаты и проверяю, существуют ли уже элементы. Если они это сделают, я удаляю их и добавляю обновленную версию, предоставленную веб-сервисом.
Казалось, что все работает правильно, пока я не запустил панель «Инструменты», чтобы выяснить, что моя система пропускает объекты каждый раз, когда загружает их из веб-службы (начиная со второго раза). Основной метод, где вещи, кажется, портятся, это тот, который находится в моем синглтон-классе 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 не эффективно удаляет элементы. Хотелось бы узнать мысли кого-то еще о трех вещах:
- Правильно ли сделан мой анализ, что что-то еще должно сохранять добавленные отдельные крики?
- Должен ли я использовать CoreData или SQLite для хранения информации, извлеченной из веб-службы?
- Знаете ли вы, как долго должны храниться данные, хранящиеся в синглтоне? Пока приложение не будет убито?
Обновление
Я думаю, что нашел источник, однако, возможно, кто-то может дать некоторую ясность относительно правильного способа сделать это. Я создал метод 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;
Я подумал, что, поскольку я возвращаю объект, выпущенный автоматически, это должно быть хорошо. Вы видите что-то не так с этим?