2012-06-03 55 views
4

我是Objective-C的新手,並且正在通過很多示例來關注它。 我碰到這樣的代碼:接口聲明兩次? - Objective-C

@interface ImagePickerHelper : NSObject <UIImagePickerControllerDelegate, UIPopoverControllerDelegate, UINavigationControllerDelegate> 
    //Blah Blah 
@end 

@interface ImagePickerHelper() 
    //Blah Blah 
@end 

在谷歌上搜索,我才知道,他們指定超和代表(約順便說一下,我知道小人物)接口名稱後。

但是爲什麼界面在這裏聲明瞭兩次?

+1

[拉文檔,先生(http://developer.apple.com/library/ios/documentation /cocoa/conceptual/objectivec/chapters/occategories.html) – CodaFi

+0

[iOS 5項目中使用的.m文件中的@interface聲明是什麼?](http://stackoverflow.com/questions/9751057/what -is-the-interface-declaration-in-m-files-used-for-in-ios-5-projects) –

回答

3

不,它沒有聲明兩次,它是一個Class接口(一個匿名類別),它被創建用來存放你想在你的類中保持私有的方法,對於你不想要其他類的方法看到或與互動..

人們常常申報標準類別使用一個名稱(通常是「私有」)持有的私有方法,但 使用匿名類在一個名爲類別的主要優點是,如果你沒有實現在匿名類別中聲明的方法,編譯器會發出抱怨。

我注意到它是從XCode 4.3開始默認創建的。

把方法分成這個擴展類是類似於聲明在Java或C++的私有方法...

2

你看到的第二個「@interface」(可能是一個.m文件)是一個類擴展,可能意味着私有方法(從編譯器將生成「私有」的意義上說,「可能不會響應」警告)。

+2

是的,線索是'()'字符,也許裏面有一個名字。這就是所謂的「類別」。 (我知道,這個奇怪的術語,但它顯然有它的起源在Simula或其他一些深暗過去的某處)。 –

+1

實際上,它的根源在SmallTalk中。 :) – CodaFi