2012-07-24 44 views
0

因此,我最近致力於擴展List/Details應用程序模式的功能:在Details視圖上實施輕掃以移至父列表中的上一個或下一個項目。在Cocoa中重用非平凡代碼的機制?

我的解決方案需要在Details視圖中添加一個屬性,在List視圖中添加3個屬性,在每個屬性中實現幾個新的函數,並確保某些代碼在ViewDidLoad中運行,並且表視圖的DidSelect方法。

我一直在尋找Cocoa和XCode 4中重複使用(snippets,subclassing和categories)的顯而易見的機制,以便使這些代碼(這幾乎是獨立的)更容易添加到其他屏幕中和應用程序,並沒有看起來適合它。我找不出任何可以封裝所有必要更改的機制,或簡化其他屏幕或項目的代碼重用。

下面是特定的短缺憾:

片段:只能插入一個單一的代碼塊,所以不適合用於需要在同一個文件中的多個文件的變化,或甚至多個點的代碼。

類別:可以添加新方法(或重新定義現有方法),但不能添加新屬性。

子類化:可以添加新的方法和屬性,但不涉及跨多個類的變化來實現解決方案。

可以使用混合方法(使用片段,類別和子類),但是沒有機制將這些代碼修改打包在一起!

即使它們來自其他語言或IDE,但瞭解其他地方使用的任何方法也會很有趣。

感謝

回答

1

類別一般可以通過associated references添加屬性。這是解決各種問題的好辦法。


編輯:如果你只是想一些對象有特殊的行爲,你知道,他們在創建時,你控制自己的創作,那麼這聽起來像子類。如果您希望特定實例具有特殊行爲,並且您不控制它們的創建,或者您不知道在創建它們時需要這些行爲,那麼有一種工具可以實現這一點。這就是所謂的ISA混合,這是如何實施KVO。

iOS:PTL的第20章涵蓋了這一點,但如果您想要一些示例代碼來說明它是如何完成的,請參閱ISASwizzle示例代碼。 Robbie Hanson也有該主題的short, accessible discussion。這是一項相當先進的技術,應該小心使用,但功能非常強大。

+0

一個分類不適用於超類。但是,如果您已經創建了自定義子類,那麼創建一個類別似乎有點多餘。我試圖描繪這種情況。 – 2012-07-26 00:05:12

+0

您不應該使用類別來替換方法。在許多常見情況下,這是未定義的行爲。類別只能用於添加新方法。 – 2012-07-26 00:49:32

+0

對不起,但你的答案缺少問題的關鍵。我試圖找出可以重複使用需要跨多個類/文件進行邏輯的解決方案的機制,這些機制似乎不受片段,類別或子類別的支持。 – 2012-07-26 15:26:45