2012-07-18 71 views
0

可能重複:
Understanding @Protocols in Objective-C
Objective C protocols usage爲什麼我真的需要使用協議

我剛開始學習目標C和我似乎並沒有讓我周圍的協議頭很好。我對objective-C中的協議的理解是,你指定了一些方法定義,而沒有爲它寫實際的代碼。這意味着,決定繼承我的課程的人必須實施我所需的所有方法。

我在這裏的問題是,是不是協議創建一個額外的過頭,是不是真的需要。如果我在我的新課堂中需要一種方法,我可以實施它。爲什麼我需要從協議繼承?

爲什麼不能我不理會使用的協議,只是創建方法,因爲我需要他們。

+0

的(http://stackoverflow.com/questions/5738428/understanding-protocols-in-objective-c),[類別和協議的目的](HTTP [在Objective-C理解@Protocols]可能重複/stackoverflow.com/questions/6394915/objective-c-purpose-of-categories-and-protocols?rq = 1) – 2012-07-18 04:29:25

+0

«決定繼承我的課程的人必須實現我所需要的所有方法。»否。子類將繼承其超類的協議方法實現,就像其他任何方法一樣。協議只是方法的分組聲明。 – 2012-07-18 04:32:37

回答

1

別的不說,協議是讓編譯器可以幫助您避免常見錯誤的方法。在這種情況下,你可以指定一個類將調用另一個類的特定方法(通常是一個委託)。然後,編譯器將檢查以確保其他類(委託)實際實現了這些方法,如果沒有,則會給出警告消息。由於未定義的選擇器(方法),在編譯時獲得消息比運行時崩潰更可取。

0

我在這裏的問題是,是不是協議創建一個額外的開銷,這是不是真的需要。

沒有額外的開銷。

如果我需要一個方法在我的新類中,我可以實現它。爲什麼我需要從協議繼承?

好吧,你當然可以爲你的通用實現聲明一個子類,如果這是你需要的理想路徑。如果你嘗試這個,你可能會遇到我在下面概述的問題。

通常使用協議,因爲它們不是實際的物理類型。它是方法和/或其他協議的接口。通常,他們很小,專業。因爲objc不提供多重繼承,所以協議對於簡短擴展非常有用。

看看它們是複雜的子類繼承和一個或多個協議的類型;以NSString <NSCoding, NSCopying, NSMutableCopying, NSObject>爲例。知道objc使用單一繼承,考慮你將如何實現這個類,並從所有這些協議中「繼承」 - 然後考慮在爲所有基礎類型實現此類後,在傳遞這些類型時客戶端對客戶端的影響。類層次結構和接口變得非常混亂。許多類別中的變體數量將會爆炸以適應所有這些類型作爲參數。大多數人會在那之前停下來,並且放棄安全類型 - 這也是一個非常糟糕的主意。通過一個協議,你可以「實現這個接口」,並以一種簡單的語言功能來輸入安全性(多重繼承非常快速地變得非常難看)。 /:

相關問題