我有一个应用程序,并且有一些基本功能需要在多个控制器之间共享,一个是添加和删除我称之为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];
}
答案 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];
通过这种方式,所有这些方法都在一个地方,并且只有一个类方法,所以没有内存问题。