将数据加载到类中并使用它的策略

时间:2013-11-07 13:21:04

标签: ios objective-c class subclass appdelegate

假设我有一个加载我的初始数据集的类

//  DataModel.m


#import "DataModel.h"
@implementation DataModel
@synthesize items;

-(id) init{
    self  = [super init];
    if (self)
    {
        [self loadData];
    }
    return self;
}

-(void)loadData
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dataFile" ofType:@"json"];
    NSString *jsonString = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
    if (!jsonString) {
        NSLog(@"File couldn't be read!");
        return;
    }
    // json was loaded, carry on
    DLog(@"json Data loaded from file");
    NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];
    if (error){
        DLog(@"ERROR with json: %@",error);
        return;
    }

    items = [json valueForKeyPath:@"items"];

}

我在我的appDelegate

中初始化它(一次)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    appDataModel = [[DataModel alloc] init];
    DLog(@"init %@",appDataModel);

    return YES;
}

这个数据集即将在整个应用程序中使用和操作 - 最后它将被保存,替换原始数据集(“dataFile.json”)

问题: 这样做的最佳策略是什么? (将在许多viewcontrollers中使用此数据集......) 数据集相对较小,但在操作/读取时,我宁愿将其保存在单个位置和内存中。

Q2 - 我应该在appDelegate中真正启动它(一次)吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Singleton

  

这是一种非常强大的方法,可以在代码的不同部分之间共享数据,而无需手动传递数据。