2013-11-27 47 views
0

我正在爲iphone編寫一個obj-c假庫。我需要將該庫部署到我的客戶端以供項目使用,但我不想通過我的財產進行任何通信。我想給一個頭文件以及我的客戶可以使用的庫。但是問題是這樣的:我的A類擴展了B類,B類擴展了C類。我想給A類(文件Ah)的頭部給客戶端,但是在「啊」中有類似「import Bh」的代碼,所以如果我沒有公開我的Bh,它不會在我的客戶端項目中編譯,所以C類和深層基礎類。 而且我不能暴露這些類,因爲這些會暴露我的所有結構並導致我的屬性通過。 請大家幫忙,多謝。Objective-C庫頭文件的控制

+0

嗨,迦勒,感謝您的幫助。但似乎@class關鍵字不能用於基類,這會報告xcode中的編譯錯誤。 – user1619301

回答

1

正如Caleb回答的評論中所述,一個班級必須能夠看到其超類的@interface

但是,這是你可以做的。 ClassB的接口可能非常空,除了指定的初始化程序。然後,您可以將所有內部到您的庫屬性和方法放在一個單獨的頭文件中的類別中。例如

// ClassA.h --------------------- 
#import "ClassB.h" 

@interface ClassA : ClassB 

// stuff 

@end 

// ClassB.h --------------------- 

@interface ClassB : NSObject 

// Properties and methods on ClassB that really are public (possibly none). 

@end 

// ClassB+Internal.h --------------------- 

#import "ClassB.h" 

@interface ClassB(Internal) // "Internal" can be anything you like 

@property (copy) NSString* mySecretProperty; 

// etc 

@end 

// ClassB.m --------------------- 

@interface ClassB() // Class extension 
// Really secret properties and methods not to be seen outside of this file. 
@property (copy) NSString* myReallySecretProperty; 

@end 

@implementation ClassB 

@synthesize mySecretProperty; 

@end 

通常你會創建內部類的實現,但你實際上並不需要只要在運行時存在的方法。

+0

謝謝你JeremyP,這是個好主意。我正在努力將我的結構轉變爲這種設計模式。 – user1619301