[英]Category usage in Objective-C
我看到一些我繼承的代碼如下所示:
@interface SomeClass (private)
這是在SomeClass.m
中的實現文件。 有一個附帶的頭文件,不建議該類使用類別。 在這種情況下, (private)
只是給SomeClass
的類別一個不好的名字嗎? 我假設在實現中指定類似這些類別是完全合法的嗎?
它不是私有的名稱“私人”; 這些方法是私有的,因為它們屬於在實現文件中聲明的類別。
類別有三種用法,每種用法都向類添加方法(注意:僅限方法,而不是iVars)
擴展現有的Cocoa類
這允許您將自己的方法添加到現有類。 例如,如果要擴展NSString以應用特殊大小寫,則可以創建一個名為NSString + Capitals的新類。 在NSString + Capitals.h中你會得到:
@interface NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString;
@end
在NSString + Capitals.m中,您將實現該方法
@implementation NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString
{
// Implementation
}
類上的私有方法
這與上面相同,只是在實現文件中聲明和定義了額外的方法(.m)通常是一種擁有私有方法的方法 - 因為它們不在.h文件中(這是其他#imported)他們根本不可見。 在這種情況下,方法的實現在它們自己的實現塊中完成。 例如
// someClass.m
@interface someClass (extension)
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
@end
@implementation someClass (extension)
-(void)extend {
// implement private method here;
}
類擴展 (10.5 Leopard的新功能)
一種更簡單的私有方法。 在這種特殊情況下,類別名稱為空,並且私有方法在與所有其他類方法相同的塊中實現。
// someClass.m
@interface someClass ()
-(void)extend;
@end
@implementation someClass
// all the methods declared in the .h file and any superclass
// overrides in this block
// Implement private methods in this block as well.
-(void)extend {
// implement private method here;
}
@end
這是Apple類別和擴展文檔的鏈接 。
“私有”只是一個名稱,表明方法不是公共的,並且用於類的內部實現,但是在類別的聲明中沒有任何內容強制執行。
此外,類別中定義的方法會在運行時添加到類定義中,因此附帶的頭文件無需聲明它正在使用類別 - 它會自動“使用”。
我用它來給我一個聲明(因此文檔,以及關閉編譯器)的輔助方法,而不需要在公共接口中。 然后,除了使用頭文件中定義的方法之外,該類的“消費者”(默認,除了良好的方式之外沒有什么能阻止它們)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.