我有这个原型的功能:
func myFunction(completionHandler:((response:[NSString:AnyObject])->Void)?))
该completionHandler原型可以为关闭或作为一个函数传递......把它当作封我知道如何使用此语法定义捕获列表[weak self],但如何定义一个捕获列表,如果不是直接的函数参数我限定着封闭想传递一个功能名称?
myFunction(anotherFunction) // how to set capture list from here?
VS
myFunction{
[weak self] (response) in
}
Run Code Online (Sandbox Code Playgroud)
```
编辑 - - -
一个可能的解决方案是将功能代码包装到一个块中,设置捕获列表并执行块...但听起来很奇怪:/
myFunction(anotherFunction) // how to set capture list from here?
.
.
.
func anotherFunction(response:[NSString:AnyObject]) {
let safeBlock = {
[weak self] in {
self?.callSomethingSafely()
}
}
safeBlock()
}
Run Code Online (Sandbox Code Playgroud)
编辑(基于下面哈米什的更正):
我不知道有什么方法可以强制引用的方法在内部使用捕获变量的弱版本。正如您在示例中所示,是否执行此操作取决于实际的方法实现。
然而,值得注意的是,除非您要无限期地存储对该完成处理程序的引用,否则您无需担心弱 self。
我假设一旦启动的异步任务完成,就会调用完成处理myFunction程序。在这种情况下,完成处理程序捕获的任何引用将仅保留到完成处理程序运行为止。然后这些引用将被释放,并且不会有任何保留周期。闭包中的弱 self 仅在“self”保留闭包并且闭包捕获“self”时才重要,从而建立循环引用/保留循环。
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |