Если ваши наборы данных не являются большими, я считаю, что гораздо лучше хранить все данные в памяти, и записывать только на диск в приложении, завершать / в фоновом режиме и читать с диска при запуске приложения.Создайте одноэлементный класс «FooManager» для хранения данных, необходимых в разных частях вашего приложения, и получите доступ к данным через API одноэлементного класса.Я думаю, что это намного чище, чем подвешивать все на ProjectAppDelegate.Это также должно решить ваше состояние гонки на запись / чтение.
РЕДАКТИРОВАТЬ: вот крошечный классный менеджер одноэлементного сетевого кэша изображений, который я использую в текущем проекте.Иногда пример стоит тысячи слов учебников :).Чтобы использовать этот класс, в любом коде просто #import заголовка и выполните:
NetworkImageCacheManager *nicm = [NetworkImageCacheManager sharedInstance];
UIImage *img = [nicm imageWithURL:imageURL];
Вот код этого класса:
#import <Foundation/Foundation.h>
@interface NetworkImageCacheManager : NSObject
{
NSMutableDictionary *imgCache;
}
@property (nonatomic, retain) NSMutableDictionary *imgCache;
+ (NetworkImageCacheManager *) sharedInstance;
- (UIImage *) imageWithURLString:(NSString *)imgURLString;
- (void) setImage:(UIImage *)theImage forURLString:(NSString *)imgURLString;
@end
@implementation NetworkImageCacheManager
@synthesize imgCache;
- (id) init
{
self = [super init];
if ( self )
{
self.imgCache = [NSMutableDictionary dictionary];
}
return self;
}
+ (NetworkImageCacheManager *) sharedInstance
{
static NetworkImageCacheManager *g_instance = nil;
if ( g_instance == nil )
{
g_instance = [[self alloc] init];
}
return g_instance;
}
- (UIImage *) imageWithURLString:(NSString *)imgURLString
{
UIImage *rv = [self.imgCache objectForKey:imgURLString];
return rv;
}
- (void) setImage:(UIImage *)theImage forURLString:(NSString *)imgURLString
{
[self.imgCache setObject:theImage forKey:imgURLString];
}
- (void) dealloc
{
[imgCache release];
[super dealloc];
}
@end