我想創建一個只能通過工廠方法實例化的對象。我通過拋出異常來防止init
被使用(請參閱Creating a class with no init method)。但是這意味着我必須創建一個新的方法secretInit才能在工廠方法中使用。對象只能通過工廠方法初始化(Objective-c)
//Factory method
- (URLReqs *)buildURLReq:(NSString *)location
{
URLReqs *tmp=[[URLReqs alloc] secretInit];
tmp.str=location
return tmp;
}
- (id) secretInit{
return [super init];
}
這種方法很混亂,儘管我們可以避免在頭文件中聲明secretInit,但仍有人可以訪問它。有更好的解決方案嗎?
一個想法是嘗試直接調用URLReqs超級對象上的init,而不是創建一個函數來執行它。
我認爲你的'buildURLReq:'方法應該返回'tmp',而不是'nil'。 – dreamlax 2010-02-03 00:42:20