2015-07-28 58 views
0

我正在爲iOS構建一個靜態庫,我希望有一些方法可供庫中的所有類訪問,但不能在庫之外訪問。讓我們做一個例子:只有靜態庫中的類才能訪問的方法

這是一個叫做與庫外可用兩種方法類:

@interface A : NSObject 

-(void)methoAvailableOutside1; 
-(void)methoAvailableOutside2; 

//This method has to be visible only to classes within the library 
-(void)methodInternalToTheLibrary; 

@end 

稱爲B類仍然是內部圖書館。它可以調用屬於所有方法(也是方法應該是「內部」):到

#import "B.h" 

@implementation B 

-(instancetype)init{ 
    self = [super init]; 

    if(self){ 
     _aObject = [[A alloc]init]; 
     [_aObject methoAvailableOutside1]; 
     [_aObject methoAvailableOutside2]; 

     //here I can call the "internal" method 
     [_aObject methodInternalToTheLibrary]; 
    } 

    return self; 
} 

@end 

現在讓我們寫一個外部類(外部:

這是B的實施圖書館,明確):

#import "MyCustomLibrary.h" 

@interface ExternalClass : NSObject 

@property A* aObject; 

@end 

這是外部類的實現:

#import "ExternalClass.h" 

@implementation ExternalClass 

- (instancetype)init 
{ 
    self = [super init]; 

    if (self) { 
     _aObject = [[A alloc]init]; 
     [_aObject methoAvailableOutside1]; 
     [_aObject methoAvailableOutside2]; 

     //!!!Here THIS SHOULD BE... 
     [_aObject methodInternalToTheLibrary]; 
     //...FORBIDDEN!!! 
    } 

    return self; 
} 

@end 

我該如何做到這一點?先謝謝你。

回答

1

我能想到的唯一方法是使用該標題中定義的附加方法來創建附加頭文件。匿名類別。

publicHeader.h 
@interface A : NSObject 
-(void)methoAvailableOutside1; 
-(void)methoAvailableOutside2; 
@end 

然後一個母親.h文件只用在你的庫代碼中。

privateHeader.h 
@interface A() 
//This method has to be visible only to classes within the library 
-(void)methodInternalToTheLibrary; 
@end 

可以工作嗎?它不能保證其他代碼不能調用該方法,但意圖是清楚的。