在我的app委托中,我有一个变量,各种控制器使用(感谢新闻组建议如何从控制器访问这样的变量)。每个控制器可能需要多次访问它。我使用这段代码:
((MyAppDelegate *) [UIApplication sharedApplication].delegate).soundEffects
忽略可读问题(正如其他任何人我将永远看不到这些src)它会改变任何东西,如果在控制器初始化我有一个指向app委托对象的指针,只是像这样访问它:
... MyAppDelegate *foo = [UIApplication sharedApplication].delegate ... foo.soundEffects ...
看起来第二种方法需要更多的mem存储来保存实例变量foo,而我的第一种方法可能会更慢地获取变量。
什么更好?
感谢
答案 0 :(得分:0)
在这种情况下,您无需担心速度或内存。在您知道自己遇到问题之前,先抵制优化的诱惑。通过专注于代码的可读性,您可以获得更好的服务,即使您是唯一阅读代码的人。设计良好的代码更易于阅读和维护,可以减少错误,并且如果您发现自己面临速度或内存问题,将更容易优化。如果它让您的代码更容易阅读,请不要犹豫,在这里和那里牺牲几个字节。
在这种情况下,您提议的更改肯定是朝着正确方向迈出的一步,因此,如果您愿意,请继续进行此增量更改。
如果你感觉很大胆,并且想要朝着正确的方向迈出另一步,你可以将soundEffects成员变量添加到需要它的每个控制器,使用@property(非原子,保留)使其成为属性,并设置构造每个控制器之后的属性(在你的app delegate的应用程序中:didFinishLaunchingWithOptions:,以及你可能构建这些控制器的其他地方)。这样,您的控制器甚至不需要知道应用程序委托存在。这种“松散耦合”是一种面向对象的设计优点,可以最大限度地减少对象之间的依赖关系,使其更易于维护。