这是一个用于共享功能的糟糕核心数据模式吗?

时间:2011-02-23 14:01:41

标签: iphone objective-c core-data

我有一个应用程序,并且有一些基本功能需要在多个控制器之间共享,一个是添加和删除我称之为BookmarkedObjects到我的数据存储。所以我创建了以下函数,它似乎工作得很好,我想将这个模式应用到我的代码中的其他函数,比如将对象添加到订单,看看订单是否已存在等等。

这是我正在做的事情:

+(void) RemoveBookmark: (NSString *) aItemID  withCustomerNumber: (NSString *) aCustomerNumber withManufacturerID: (NSString *) aManufacturerID withManagedObjectContext: (NSManagedObjectContext *) aContext {
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"BookmarkedItem" inManagedObjectContext:aContext]];
    [request setPredicate:[NSPredicate predicateWithFormat:@"CustomerNumber==%@ AND ManufacturerID==%@ AND ItemID==%@", aCustomerNumber, aManufacturerID, aItemID]];
    [request setFetchLimit:1];
    NSError *error = nil;
    NSArray *results = [aContext executeFetchRequest:request    error:&error];
    [request release], request = nil;
    [aContext deleteObject:[results lastObject]];
    [aContext save:&error];
}

1 个答案:

答案 0 :(得分:2)

我建议你创建一个单例类并在其中添加所有这类函数。它的主要好处是所有类方法都在编译时加载,所以如果有5个这样的函数,你的应用程序就会占用不必要的记忆,所以我会建议你 像这样 定义名为SharedFunctions

的类

in .h

@interface SharedFunctions : NSObject
{
}
+(SharedFunctions*)sharedInstance;
-(void)yourFunction;
.....
//make as many instace methods as you want
@end

in .m

@implementation SharedFunctions
static SharedFunctions* singletonInstance = nil;

-(id)init
{
    if (self = [super init])
    {

    }
    return self;
}


+(SharedFunctions*)sharedInstance
{
    @synchronized(self) {
        if (singletonInstance == nil) 
        {
        singletonInstance =  [[SharedFunctions alloc] init]; 
        }
    }
    return singletonInstance;
}

///and define your methods 
-(void)yourFunction
{
       //somthing
}
@end

现在使用你的方法只需调用

 [[SharedFunctions sharedInstance] yourFunction];

通过这种方式,所有这些方法都在一个地方,并且只有一个类方法,所以没有内存问题。