我遇到了一个非常不错的 Objective C/iOS 计算器教程。我自己也考虑了很长时间,并对他们的实现方式感到惊讶。它非常漂亮和优雅。
本教程首先设置了calculatorbrain.h 和calculatorbrain.m 文件,这些文件旨在跟踪计算器堆栈以及处理该堆栈上的操作的方法。
然后它为 viewcontroller 声明那个calculatorbrain 类的@property 实例变量。
我的问题是似乎有很多方法可以实现这一点。为什么这种方式会更好?
1)一个简单的替代方法似乎只是在 View Controller 中声明堆栈和堆栈方法。
2) 与其将其声明为@property,不如在 View Controller 中创建一个calculatorbrain 的实例。
三种方式的优缺点是什么?哪种目标编程原则可以指导选择哪种方式更可取?
谢谢。
最佳答案
“有不止一种方法可以做到这一点。”
虽然它没有在 UIViewController
中具体编码,一种常见的模式是模型(无论它是什么)被插入 View Controller (例如 NSViewController
的 representedObject
属性。)如今,可以说是使用 @property
的惯用方式。像这样:
@interface MyViewController : UIViewController
@property (assign) MyCalculatorModel* model;
@end
如今,借助 ARC 和自动属性合成,您无需指定底层实例变量,这就是您真正需要做的一切。然后,当您创建 View Controller (可能在您的应用程序委托(delegate)类或其他应用程序级 Controller 中)时,负责创建 View Controller 的 Controller 使用该属性将模型推送到其中。 (注意,在拆解 View Controller 之前,它还应该将属性设置为
nil
。)您的选项 #1 不太理想,因为它将非 View 代码与特定于 View 的代码结合在一起。您的选项 #2 不太理想,因为它意味着 View Controller 负责以某种方式获取模型并将其放入私有(private)实例变量本身,这可以说是控制反转。 (即,您希望 View Controller 外部的东西插入模型,但它不能因为实例变量默认是私有(private)的)
关于iOS计算器实现困境: how and where to create the calculator stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125290/