我正在爲iOS的靜態庫工作,並且希望實現一些公共的供庫中其他類使用的方法,但不能從外部看到。基本上,我想創建類似於Apple的「私人」API調用的東西。iOS靜態庫和方法隱藏
我很確定有人能夠調用這些方法,因爲他們發現了他們的名字,但我只是想將它們與頭文件一起封裝在庫中,以便XCode不會給他們選項默認情況下調用這些方法,可能會引發警告。
任何想法如何實現?
我正在爲iOS的靜態庫工作,並且希望實現一些公共的供庫中其他類使用的方法,但不能從外部看到。基本上,我想創建類似於Apple的「私人」API調用的東西。iOS靜態庫和方法隱藏
我很確定有人能夠調用這些方法,因爲他們發現了他們的名字,但我只是想將它們與頭文件一起封裝在庫中,以便XCode不會給他們選項默認情況下調用這些方法,可能會引發警告。
任何想法如何實現?
一個想法如下 - 您可以在單獨的.h文件的單獨類別中定義類的「私有」方法。例如,你可以有A類看起來像下面:
啊
@interface A : NSObject {
}
- (void) foo; //public method
@end
現在私人A的方法可以在不同的文件中聲明:
A + Internal.h
@interface A (Internal)
- (void) bar; //private method
@end
A (A.m)
的實現文件可以具有這兩組方法的實現。
在您的靜態庫中,您不會發布名稱中包含"+Internal"
的頭文件。您的庫的用戶只能看到A.h
中的方法,但庫中的類可以同時使用這兩個方法。
您可以在.m文件頂部或其專用頭文件中的category@interface MyClass(PrivateMethods)
或類擴展名@interface MyClass()
中聲明您的「私有」方法。
類擴展是像匿名類,除了它們聲明的方法必須在對應的類主@implementation塊來實現。
一個類通常具有一個公開聲明的API,然後有私人聲明的其他方法僅供類或該類所在的框架使用。如上所述,您可以在私有頭文件或實現文件中的類別(或多於一個類別)中聲明這些方法。這可以工作,但編譯器無法驗證所有已聲明的方法是否都已實現。
類擴展允許您爲位於主類@interface塊之外的位置的類聲明附加的必需方法。
參見: Best way to define private methods for a class in Objective-C
記住,編譯器將不檢查是否在類中聲明的方法實際上是實現與否。如果這是一個問題,您可以改爲使用類擴展。類擴展與匿名類相似,只不過它們聲明的方法必須在相應類的主@implementation塊中實現。 – albertamg 2011-06-03 15:35:01
這工作完美! @albertamg謝謝您的澄清。我必須先把它交給@Tejas先回答。 – brandontreb 2011-06-03 15:47:38
@brandontreb夠公平:) – albertamg 2011-06-03 15:51:18