Swift 中昂贵的对象管理
Posted
技术标签:
【中文标题】Swift 中昂贵的对象管理【英文标题】:Expensive Object management in Swift 【发布时间】:2014-06-04 16:25:30 【问题描述】:过去几天我一直在看 Swift,它看起来不错,但即使在查看了 Apple 发布的指南之后,我仍然感到困惑。
我知道 Swift 中的内存管理使用 ARC,因此非常安全,但是在我想要更精细地控制对象创建和销毁的情况下,我有点困惑。
举两个简单的例子:
在 ObjC 中,当您(例如)喜欢一个 UIViewController 并打算在您的应用程序的整个生命周期内一直存在并且只创建一次(比如说因为它的创建成本很高)时,您可以将其设为属性,然后像这样包装它的 Alloc Init:
if (!self.myProperty)
self.myProperty = [[MyObj alloc] init];
这样它只创建一次,保持状态,并且同一个对象实例可以无限期地重复使用,产生已知的对象引用,并且每次 viewController 超出范围时都不必重新创建良好的性能。
另一个例子是 NSMutableString 与 Swifts String。
您可以多次设置 NSMutableString 的字符串,并且它会保持相同的对象引用,但是在更改 Swift 字符串时似乎并非如此。
这可能只是“Objective C 中不推荐使用的想法”,但在某些对象的使用生命周期内,是否存在关于保留昂贵对象或保持状态(相同对象)的最佳实践。
【问题讨论】:
【参考方案1】:我认为您正在寻找的是“惰性存储属性”:
example in the swift docs 是:
class DataManager
@lazy var importer = DataImporter()
var data = String[]()
// the DataManager class would provide data management functionality here
它说的是@lazy
:
惰性存储属性是在第一次使用时才计算初始值的属性。您可以通过在声明之前编写 @lazy 属性来指示惰性存储属性。
关于NSMutableString
的评论有点不同,你可以继续在你的swift代码中使用NSMutableString
,但是Apple鼓励开发者尽可能使用Swift内置类型:)
请参阅swift docs 中的“字符串可变性”部分
【讨论】:
以上是关于Swift 中昂贵的对象管理的主要内容,如果未能解决你的问题,请参考以下文章