iOS计算器实现困境: how and where to create the calculator stack

标签 ios properties

我遇到了一个非常不错的 Objective C/iOS 计算器教程。我自己也考虑了很长时间,并对他们的实现方式感到惊讶。它非常漂亮和优雅。

本教程首先设置了calculatorbrain.h 和calculatorbrain.m 文件,这些文件旨在跟踪计算器堆栈以及处理该堆栈上的操作的方法。

然后它为 viewcontroller 声明那个calculatorbrain 类的@property 实例变量。

我的问题是似乎有很多方法可以实现这一点。为什么这种方式会更好?

1)一个简单的替代方法似乎只是在 View Controller 中声明堆栈和堆栈方法。
2) 与其将其声明为@property,不如在 View Controller 中创建一个calculatorbrain 的实例。

三种方式的优缺点是什么?哪种目标编程原则可以指导选择哪种方式更可取?

谢谢。

最佳答案

“有不止一种方法可以做到这一点。”

虽然它没有在 UIViewController 中具体编码,一种常见的模式是模型(无论它是什么)被插入 View Controller (例如 NSViewControllerrepresentedObject 属性。)如今,可以说是使用 @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/

相关文章:

ios - Windows 中的 "cordova run ios "不起作用

iOS 应用程序 Modbus 使用 Swift 读/写

objective-c - 子类中的狭义属性类型

动态添加属性和 setter 的 Pythonic 方式

java - 根据其他属性值在 Maven 中定义属性

ios - 当父 View 在 StackView 中时,UIView 的 subview 错位

iOS 通用链接(调试时)不起作用?

swift - 为什么在更改现有值的成员时会运行属性观察器?

c# - 传递给 C# 中的属性时对象变为空

C# 反射和获取属性