我想每个实例只运行一次代码块.
我可以将dispatch_once_t谓词声明为成员变量而不是静态变量吗?
从GCD参考资料中,我不清楚.
谓词必须指向存储在全局或静态范围内的变量.使用具有自动或动态存储的谓词的结果是未定义的.
我知道我可以使用dispatch_semaphore_t和一个布尔标志来做同样的事情.我只是好奇.
在 Swift 3 中,dispatch_once 函数被移除,迁移指南建议使用初始化闭包:
let myGlobal = { ... global 在对闭包的调用中包含初始化 ... }()
_ = myGlobal // 使用 myGlobal 将仅在第一次使用时调用初始化代码。
我想从初始化闭包中访问“self”实例变量,如下所示:
class SomeClass {
var other = SomeOtherClass()
let initialize: () = {
// self.other - this doesn't work, complains about unresolved identifier 'self'
// how to access self.other here?
} ()
func doSomething() {
// initialize will only be called once
initialize
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在闭包中无法访问“自我”,以及如何使其成为?