2013-06-26 157 views
2

我已經使用.m中的類擴展作爲具有「私有」方法和變量的方法。我讀過自Xcode 4.4以來,編譯器不再需要聲明的私有方法。何時聲明類擴展方法

例如,這甚至會編譯儘管helperMethodC未聲明:

在.H

@interface MyClass : NSObject 
-(void)publicMethodA; 
@end 

在.M

@interface MyClass() 
- (void) pseudoPrivateMethodB; 
@end 

@implementation MyClass 

- (void)publicMethodA 
{ 
    //Do Something 
} 

- (void)pseudoPrivateMethodB 
{ 
[self helperMethodC]; 
} 

- (void) helperMethodC 
{ 
// Do something 
} 

雖然私有方法不再需要聲明爲編譯(helperMethodC),是否有一個樣式指南,歷史原因或所有私有方法(即helperMethodC)仍應聲明的規則?或者什麼時候聲明和不聲明私有方法的「規則」?

+2

僅供參考 - 除非您有循環依賴,否則它們從不需要。您可以通過將您的方法排除在不需要私人聲明的順序上來避免它們。換句話說,如果將'helperMethodC'放在'pseudoPrivateMethodB'之前,您發佈的代碼將始終編譯。 – rmaddy

回答

2

如果他們幫助您,請聲明他們。從文檔的角度來看,它們非常有用。編譯器也會告訴你,如果你已經指定了一個方法將存在,然後沒有實現它。沒有規則,但添加它們是一個好主意。考慮如果你必須在6個月內回來並編輯課程,你會有怎樣的感覺 - 將列出的方法可以幫助你?

+0

另一點是要保持方法聲明是一種重複。如果您更改方法簽名,則必須對其進行兩次編輯,否則編譯器會給您帶來警告。 – herzbube

+2

另外,如果要聲明@property爲公開只讀和私有的readwrite,則需要擴展。當分解成單獨的文件以共享一些私人到幾個類API時,擴展也很有用。 – bbum

0

雖然不再需要聲明私有方法進行編譯(helperMethodC),是否有風格指南,歷史原因或所有私有方法(即helperMethodC)仍應聲明的規則?或者什麼時候聲明和不聲明私有方法的「規則」?

有多種約定,但沒有標準。

真的應該有/如果你需要支持較老的工具鏈 - GCC或Clang的舊版本。

一旦限制被刪除,我認爲最好的做法是將(冗餘)聲明放在不需要的地方。高警告級別和ARC語義可以引導您在這裏。

如果引入類型:

Something * s = [array objectAtIndex:i]; 
s.string = @"string"; 
// rather than: [array objectAtIndex:i].string = @"string"; 

而唯一的參數/返回類型命名您的選擇:

// BAD: May be ambiguous. 
// Solution: Choose a more descriptive selector name. 

// class A 
- (void)setX:(int)x; 

// class B 
- (void)setX:(double)x; 

那麼編譯器會通知您歧義。