2011-09-19 20 views
0

在我的追求是客觀C的大師,我一直運行到它的精妙之處,我想你們大家同分享,並獲得一個瞭解爲什麼目標C有心計

1)我有兩個初始化方法,由NSObject的繼承我的目標C類和一個的一個是,我創造了我自己的自定義方法,讓我們說

initCustomMethod:(int)par1 argument2:(int)par2; 

我的目標是通過提供的init()方法調用initCustomMethod,基本上

-(id)init{ 
    return [self initCustomMethod:1 argument2:3]; 
} 

當然,維護順序,我有init出現在.m文件initCustomMethod之前。 Xcode警告我告訴我initCustomMethod沒有找到,我繼續前進,並且順序改變,init initCustomMethod聲明後出現init,並且不再有這樣的警告信息,一切都很好。

我同意,順序是重要的,因爲它本質上是從C派生的,但我不確定這一點。因爲我洗牌某些屬性及其自定義方法的順序,在給定屬性的自定義setter方法之後聲明屬性@synthesize,但沒有這樣的錯誤副本。

任何人都可以指出這裏的惡意嗎?

謝謝你們!


非常酷的傢伙,感謝幫助我與此。另外,因爲我有一個自定義的init方法,所以我在這個方法中初始化super,並使用原始的init方法調用自定義的init方法。

有什麼問題嗎?

回答

5

在你引用它的任何地方之前,你應該在你的接口中聲明initCustomMethod:argument2,這通常會在你的頭文件中。

例如,你通常會具有.h文件看起來像:

@interface MyClass 
{ 
    //instance variables 
    int anInstanceVariable; 
} 

// properties 
@property (nonatomic, assign) int aProperty; 

// methods 
-(id)initCustomMethod:(int)par1 argument2:(int)par2; 

@end 

如果你這樣做,則順序您定義initinitCustomMethod:argument2:都不會有問題。這是因爲聲明告訴編譯器,您正在定義該方法,以及它看起來像什麼,所以它稍後使用時不會感到困惑。

2

Objective-C在聲明或定義之前使用函數或方法是一個壞主意。在init之前加上initCustomMethod:argument2:意味着前者已經在後者中定義。但是,如果你只是在頭文件中聲明它,那麼他們進入的順序無關緊要。

2

將自定義方法名稱添加到頭文件中 - 編譯器只是按順序進行處理。如果您沒有前向聲明,編譯器將不知道該如何處理該呼叫。如果你想讓你的程序的其他部分能夠調用它,你將需要把它放在標題中。