gpt4 book ai didi

objective-c - 如何减少 Objective-C 代码中的代码重复?

转载 作者:太空狗 更新时间:2023-10-30 03:53:42 24 4
gpt4 key购买 nike

我意识到这是一个过于宽泛的问题,但我发现我的 Objective-C 代码重复性很高。我认为新的 block 功能会有所帮助,但我还不能假设我的所有用户都在使用 iOS 4。

我经常会得到两三个具有很多相似逻辑的 Controller 。我确实将其中的一些逻辑拉入了一个公共(public)基类,但是,尤其是与委托(delegate)相关的代码,我发现由于细微的差异,在几个不同的地方出现了非常相似的逻辑。

例如,如果我有一个 UITableViewController 并且我有几个使用相同行的多个子类,那么我对继承几乎无能为力。如果子类添加了额外的行(或多行和/或如果它们位于表的中间而不是末尾),则索引中断并且父类(super class)中的大多数委托(delegate)方法不再起作用 - 我必须在子类中重新实现它们。

同样,我意识到这很模糊,但是人们需要什么样的模式才能防止它突然出现?

谢谢!

最佳答案

您正在使用/思考错误的设计模式。

Objective-C 专门使用委托(delegate)设计模式来避免子类的激增。属性和相同的方法进入类或有限的子类,而每次使用自定义的方法进入委托(delegate)类。

例如,UITableView 类只关心每个表共有的所有属性和方法。所有定制都在委托(delegate)和数据源(这只是另一个委托(delegate))对象中进行。 UITableViewController 将所有内容都绑定(bind)到逻辑 View 层次结构中。

如果您发现自己有大量相似的表,您应该创建委托(delegate)/数据源类的层次结构来处理更改。

请记住,让 UITableViewController 既是委托(delegate)对象又是数据源对象只是为了方便而不是必需的。委托(delegate)和数据源可以在一个或两个单独的对象中,它们本身可以在一个或多个类中。

特别是表格是高度定制的。每个表处理不同的数据,这些数据在不同的单元格中以不同的顺序显示。这意味着确实没有办法避免编写相对大量的自​​定义代码。

阅读 Delegate Design Pattern.

更新:

If a subclass adds an additional row (or multiple rows and/or if they're in the middle of the table rather than at an end), the indexing breaks and most of the delegate methods in the superclass no longer work

这听起来像是您将模型逻辑放入 tableView 委托(delegate)/数据源中。两个委托(delegate)都不必因为添加/删除行或部分而被重写。行和部分的逻辑应该在模型对象中,例如核心数据,委托(delegate)人应该只关心将模型的逻辑行和部分转换为 TableView 中的行和部分。在绝大多数情况下,这种翻译可以通过样板来完成。任何给定的委托(delegate)都应该能够使用相同的代码显示和任意数量的不同逻辑表。

唯一真正的定制点通常是表格 View 单元格。即便如此,您最多也只能查看每个表中的少量更改。

查看带有 Core Data 的 Xcode 模板 tableview 项目。它可以在不更改任何代码的情况下显示大量表格,因为所有更改都发生在 Core Data 模型层。

关于objective-c - 如何减少 Objective-C 代码中的代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com