ios - 在 Swift 中,当我声明一个非可选属性但不能保证初始化时,我是否会丢失任何资源?

标签 ios swift performance initialization variable-declaration

所以我正在使用两个属性,一个是数组,另一个是 Realm 的自定义容器类型,称为 Results (其行为类似于 List<T> ):

var rowHeights: [CGFloat?]!
var myResults: Results<ChildObject>!

在这两种情况下,我都需要全局声明它们,我只能稍后在 viewWillAppear() 中初始化它们,这意味着从技术上讲,就 Swift 而言,无法保证初始化:

override func viewWillAppear(_ animated: Bool) {
...
myResults = myParentObject.children.sorted(byKeyPath: "childPath", ascending: true)
...
rowHeights = Array(repeating: nil, count: myParentObject.children.count)
...
}

我的问题是:

  1. 显式声明这些属性是否占用任何资源,如果占用,占用多少?
  2. 我使用的初始化语法/方法是否正确(尤其是数组)?

最佳答案

  1. 是的,但只是非常小的数量——不值得考虑。

  2. 我不知道您所说的“初始化”或“正确”是什么意思。两者都被隐式初始化为 nil 只是通过声明为 var 可选。 (在 Swift 中,只有 var Optionals 得到这种隐式初始化的特殊处理。)你说“我只能稍后初始化它们”但实际上你稍后做的是 < em>不初始化;您只是将 nil 值替换为不同的值。

    至于“正确”,编译就一定“正确”。但是,更广泛地说,我想我明白为什么你要延迟分配这些值直到 viewDidLoad,而且它是完全正确的:使用一个 Optional 这样您可以稍后在 viewDidLoad 中提供一个值,这是 Swift iOS 编程中常见且正确(且重要)的模式。

关于ios - 在 Swift 中,当我声明一个非可选属性但不能保证初始化时,我是否会丢失任何资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057815/

相关文章:

iphone - 在 NSString 中将 NSData 显示为二进制

python - 删除 Realm ,但仍然收到此错误 : module importing failed: invalid token (rlm_lldb. py,第 37 行)文件 "temp.py",第 1 行,

ios - Xcode 多个 UIButton Action

c++ - 为什么两个连续的收集指令比等效的基本操作执行得更差?

python - 有没有更好的方法来删除长度等于或高于阈值的连续零部分?

ios - 如何链接XCODE项目的外部框架

iOS 11 - <a href ="tel:1-427-555-05-05"> 链接仅适用于在 iPhone 上长按,单击无效

swift - 使用 Swift 显示签名 View

swift - 通过点对点同时发送 String 和 NSData?

java - 如何检查连接是否是性能瓶颈