在Cocoa中重用非平凡代码的机制?

时间:2012-07-24 22:08:39

标签: objective-c xcode cocoa modularity reusability

所以我最近致力于扩展List / Details应用程序模式的功能:在Details视图上实现滑动以移动到父列表中的上一个或下一个项目。

我的解决方案需要向Details视图添加一个属性,向List视图添加3个属性,在每个属性中实现几个新函数,并确保某些代码在两者的ViewDidLoad和表视图的DidSelect方法中运行。

我一直在寻找Cocoa和XCode 4中可用于重用的明显机制(片段,子类和类别),以便使这些代码(几乎是独立的)更容易添加到其他屏幕中应用程序,似乎没有适合它。我无法弄清楚任何机制可以封装所有需要的更改,或简化其他屏幕或项目的代码重用。

以下是具体的缺点:

片段:只能插入一个代码块,因此不适合需要更改多个文件的代码,甚至不适合同一文件中的多个点。

类别:可以添加新方法(或重新定义现有方法),但无法添加新属性。

子类化:可以添加新方法和属性,但不会解决跨多个类的更改以实现解决方案。

可以使用混合方法(使用片段,类别和子类),但没有机制将这些代码修改打包在一起!

即使它们来自其他语言或IDE,了解其他地方使用的任何方法也会很有趣。

由于

1 个答案:

答案 0 :(得分:1)

类别一般可以通过associated references添加属性。这是解决各种问题的好方法。


编辑:如果你只是想让一些对象具有特殊行为,并且你知道当它们被创建时,你控制它们的创建,那么这听起来像是子类化。如果您希望特定实例具有特殊行为并且您不控制它们的创建,或者您不知道它们在创建时需要该行为,那么有一个工具可以执行此操作。它被称为ISA调配,这就是KVO的实现方式。

iOS:PTL的第20章详细介绍了这一点,但如果您想要一些示例代码来说明它是如何完成的,请参阅ISASwizzle示例代码。罗比汉森也有short, accessible discussion的话题。这是一种相当先进的技术,应该谨慎使用,但它非常强大。