2012-05-18 69 views
2

在ox xCode(4.3)的最後一個版本中,我看到了在.m文件中進行接口聲明的預定義模板(例如Master/Detail模板)。例如,文件中MyFile.h有:在實現文件中聲明接口(Objective-C)

@interface MyFile 

@property (nonatomic, retain) NSString *someProp; 

@end 

而在MyFile.m文件有:

@implementation MyFile 

@interface MyFile { 
    NSString * anotherProp; 
} 

- (id) init... 

爲什麼對這樣做?爲什麼anotherProp未被聲明爲MyFile.h文件?

在此先感謝

+1

這不是它看起來像,因爲這是無效的代碼。這可能是這樣的:'@interface MyFile(){NSString * anotherPropt} @end @implementation MyFile - (id)init {...',在這種情況下請參閱:http://stackoverflow.com/questions/9751057/what- m-files-used-for-in-ios-5- –

+0

你是對的,我從內存中發佈它,我忘記了括號 – rai212

回答

5

那麼它沒有宣佈這種方式,但這種方式: -

@interface ClassName() { 

    Declarations; 

} 

Methods; 

@end 

這些被稱爲類extension.They類似的類別,但可以實施只有類的聲明不在任何其他類中。擴展的使用是重新聲明屬性是public或readwrite,如果需要也聲明新屬性。它們只允許您在@interface以外的位置聲明屬性和變量,以便名稱爲extensios。

由於它們使得方法公開並且類的數據隱藏能力被補償,但是類擴展有效地擴展了類的主接口,所聲明的方法具有與在聲明中聲明的方法相同的要求,所以可以解決類別的問題。班級的公共主要界面。

+0

你說得對,我忘了插入語。感謝您的解釋,我現在瞭解它 – rai212

+1

類別也可以使非公共方法(只要ObjC中的任何方法「非公共」),只要它們的聲明是隱藏的。不同之處在於擴展中聲明的方法必須在類的主@implementation塊中定義,並且該擴展可以(如前幾個編譯器版本)聲明ivars。 –

+0

@roronoa如何訪問其他類實現中的接口類方法?我嘗試在其他視圖類中聲明該接口類名稱,該類名稱未填充.... – SnakingPrabhu