抱歉,如果这是一个菜鸟问题,但是当我开始学习编程时,我被一些简单的事情绊倒了。如果我在我的一个 ViewController 中使用 NSDateFormatter 以某种格式显示我想要的日期,并且格式没有改变,那么将 NSDateFormatter 声明为我的类的 ivar 或我的类的属性是“最佳实践”吗并在 viewDidLoad 中对其进行初始化,以便我可以在不同的方法中重用它?现在我只是在需要它时在一个处理显示的方法中实例化一个,并且想知道是否最好继续声明它,或者声明一次并在整个 viewController 类中使用它。谢谢!
3 回答
这不是一个“菜鸟问题”;这是一个有合理答案的合理问题。
从纯粹的效率角度来看,您过早地进行了优化。别担心,开心就好。如果你正确地管理内存(这样你就不会泄漏 NSDateFormatters),那么你如何获得一个特定的实例并不重要,特别是考虑到这是一个如此轻量级的对象。如果你在一个循环中创建一个新的 NSDateFormatter 1000 次,那你就傻了,但如果你不时地创建对象,当你需要它并且它会正常地恢复存在时,这没什么大不了的。
另一方面,从架构的角度来看,请确保您所做的是 DRY。如果日期格式化程序根本需要任何配置,请不要在每次创建时重复自己;编写一个方法,每次都以相同的方式提供日期格式化程序,以便配置代码都在一个地方。
实例化新对象总是以内存和计算时间为代价的,所以如果可以不费力气,你应该尝试声明一次然后重用它,至少在同一个类中。NSDateFormatter
但是,它不是线程安全的,因此您不能简单地在不同线程之间共享一个实例。
对于任何对象,最佳实践是在运行时声明它,使用它并释放它,以便该对象在内存中占用的时间保持最大。
当我们需要该 ivar 的值在整个班级中相同时,我们会创建一个 ivar,就像员工的任何年龄一样,它将在不同的方法中进行检查,如资历、ageWise 类别等。如果这个 iVar 是一个对象,那么在 iPhone 中,始终将其用作属性是一个好习惯,这样内存管理问题就会转移到编译器端。
现在,在您的情况下,您可以生成一个简单的方法,该方法将获取日期对象并返回字符串,或任何字符串作为参数并返回日期对象,在那里创建一个 NSDateFormater 并使用它。无需将其设为 iVar。