2013-04-18 71 views
0

有一個簡單對象的C代碼片段,我從一個iOS的項目有:專用接口和多種實施

@interface store (private) 

@end 

@implementation store (private) 

@end 

@implementation store 

我的問題是:

  1. 是什麼(private)意味着代碼,私人界面&執行?

  2. 最後一行@implementation store是什麼意思?一個空的公共實現?沒有@end

  3. 由於在上面的代碼中有兩個@implementation store,這是否意味着objective-c支持單個接口的多個實現?

回答

0

private在Objective-C中沒有任何意義,如果你願意,可以稱它爲peanuts。如果您有多個類別,它真的是一個區分類別的標籤,但它的價值是任意的。作爲一名開發人員,這只是對你的意義。

@implementation store這一行標誌着由@interface store(即無類別)定義的類的實現的開始,該類可能在'.h'文件中聲明。事實上,接口在'.h'中是公開的(因爲其他類可以導入.h文件,因此可以查看屬性,方法等的聲明)。

它不支持多個實現,它們是疊加的。當然,那麼你有兩個實現相同的方法的問題。蘋果非常不鼓勵這種做法。這裏是doc

避免分類方法名稱衝突

因爲在類中聲明的方法被添加到現有的類,你需要非常小心的方法名。

如果在類別中聲明的方法的名稱與原始類中的方法相同,或者在同一類(甚至是超類)上的另一類中的方法相同,則行爲未定義爲哪種方法實現在運行時使用。如果您使用自己的類使用類別,但這不太可能成爲問題,但在使用類別向標準Cocoa或Cocoa Touch類添加方法時可能會導致問題。

0
  1. 這是一個objective-c category,讓您將代碼添加到現有類。 parens中的名字是任意的。
  2. 這是一個空的實現,但我很驚訝它編譯沒有@end。嘗試使用默認編譯器設置的xcode,我得到一個錯誤。如果只是爲了清楚起見,它應該有一個@end
  3. 第一個實現是第一個實現的附加組件。您可以使用它將大類分解成單獨的模塊,使某些接口的某些部分可用,而不是其他模塊,或者 - 最有用且最常見的 - 將方法添加到SDK類。
1
  1. What does (private) mean in the code, private interface & implementation? - (private)意味着你decalring /實施一個Objective-C category。在這種情況下,private只是一個名字。它不會使差異,如果它是store (myPrivateMethods)

  2. What does the last line @implementation store mean? An empty public implementation? Without @end? - @implementation store是類store的實際執行部分。不知道如果@end丟失會發生什麼。

  3. Since there are two @implementation store in above code, does that mean objective-c support multiple implementation for a single interface? - 其實store沒有2個實現。類store有一個實現,該類的一個類實現 - store (private)