2011-02-23 29 views
0

我有一個應用程序,有一些基本功能需要在幾個控制器之間共享,一個是添加和刪除我將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]; 
} 

回答

2

我會建議你做一個單獨的類,並添加所有這些類型的功能在其後援的是,所有的類方法被加載在編譯時的主要好處,所以如果有5種這樣的功能你的應用程序將佔用不必要的內存,所以我會建議你 像這樣 定義一個名爲SharedFunctions的類

在.H

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

在.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]; 

通過這種方式,所有這些方法都在一個地方,並有只有一個類方法,所以沒有內存問題。

+0

像冠軍一樣工作 - 感謝您的幫助。 – Slee 2011-03-03 13:25:45