2015-04-12 62 views
0

假設我有以下在其他類別可見類聲明的方法

FileName : DBManager.h 
#import <Foundation/Foundation.h> 

    @interface DBManager : NSObject 

      //Notice no method is declared here 

    @end 

現在,它的實現文件看起來像這樣

FileName: DBManager.m 
#import "DBManager.h" 

@interface DBManager() 
+ (DBManager*) SomeMethod; 
@end 

@implementation DBManager 
+ (DBManager*) SomeMethod 
{ 
    .... 
    return SomePtr; 
} 
@end 

現在,在一些其他類的方法,如果我做了以下

[DBManager SomeMethod] ; //Error No known class method for selector 'SomeMethod' 

但是,如果SomeMethod在.h文件內部聲明爲貓然後這個工作正常。我想知道這是否是這些方法對其他類不可見的類別的限制?

回答

2

首先,@interface DBManager()不是一個類別,它是一個類的擴展名。圓括號之間沒有標識符。

其次,這個問題不是基於該方法是否在一類,類別或類擴展聲明的知名度,它無論是在相同的翻譯單元中聲明。

一個翻譯單元是預處理器包括一個後的源文件/導入的頭文件(或其它任何文件已被列入/進口)。

錯誤是告訴你的+SomeMethod聲明中翻譯單元未聲明。如果是這樣,不管是在類接口,類別還是類擴展中聲明,都不會有錯誤。

因此,如果你聲明在頭文件中的類的接口,包括在源文件中的頭文件,你可以使用在源文件類聲明的方法。

相關問題