類可以在目標C使用類如被擴展:Objective-C類別名稱可以做什麼嗎?
@interface NSString (CategoryName)
-(NSString *)myFabulousAddition; // a fabulous additional method
@end
/////////////////////////////
@implementation NSString (CategoryName)
-(NSString *)myFabulousAddition {
// do something fabulous...
}
@end
在該小例子,我會被添加方法myFabulousAddition
到的NSString。我可以通過[anNSString myFabulousAddition]
來調用它,就像它是NSString方法集的一部分一樣。偉大而有用。
在Apple documents regarding Categories,該文檔的狀態:
有沒有限制的 類別,你可以添加到 類的數量,但每個類別名稱必須 不同,各自應申報和 定義了一組不同的方法。
如果你有這樣的事情:
@interface NSString (CategoryName)
-(NSString *)myFabulousAddition; // a fabulous additional method
@end
@interface NSString (ANOTHERCategoryName)
-(NSString *)myFabulousAddition; // a DIFFERENT fabulous additional method
// BUT with same name as the other category
@end
/////////////////////////////
@implementation NSString (CategoryName)
-(NSString *)myFabulousAddition {
// do something fabulous...
}
@end
@implementation NSString (ANOTHERCategoryName)
-(NSString *)myFabulousAddition {
// do something equally fabulous, but DIFFERENT...
}
@end
缺乏在括號名稱的表示形式是一個擴展類,如下所示:
@interface MyObject() // No name -- an extension vs category to MyObject
- (void)setNumber:(NSNumber *)newNumber;
@end
類別名稱對編譯器或鏈接器有任何意義嗎?無論如何,類別名稱是方法簽名的一部分嗎?還是它是原始名稱空間的一部分?如果類別名稱沒有意義,你怎麼知道你是否要踩另一種方法並得到未定義的行爲?
似乎我唯一的保護是'SomeUniquePrefixForMyCompanyOrMeThatIsUglyFabulousMethod'這只是增加了我可憐的手指重複應激綜合徵...謝謝! – 2011-04-16 19:56:49
而實際上添加前綴到您使用的是類添加方法,還建議由蘋果... – Moszi 2011-04-16 20:05:57
@蘿蔔頂,如果Xcode中沒有提供代碼完成,這將是真實的。 – 2011-04-18 08:19:49