相关疑难解决方法(0)

如何在Swift 2.0中"强化"使用后卫的可选自我

有一个类似的问题关于如何weakify/ strongify自我,这是回答,但我想知道如何使用"自我"没有向右漂移造成的if let:

Welcome to Apple Swift version 2.0 (700.0.59 700.0.72). Type :help for assistance.
  2> import Foundation
  3> class Foo {
  4.     func guardOptSelf() -> () throws -> Void {
  5.         return { [weak self] in
  6.             guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }
  7.             self.doSomethingNonOptionalSelf()         
  8.         }
  9.     }
  10. }
repl.swift:6:19: error: pattern matching in a condition requires the 'case' …
Run Code Online (Sandbox Code Playgroud)

swift swift2

27
推荐指数
3
解决办法
9007
查看次数

Swift闭合导致自我强烈的保留周期

我只是想知道我是否正确理解这一点.因此,根据apple docs,当你创建一个闭包作为类实例的属性并且该闭包引用self(创建闭包属性的类)时,这将导致一个强大的保留周期,最终类和闭包将被释放.所以在非专业术语中,这意味着如果我有一个具有属性且该属性是闭包的类,并且一旦我在类中分配了该闭包的功能,该类声明了将导致强保留周期的闭包属性.下面简要说明我的意思

class SomeViewController{
  let myClosure:()->Void

  public func someFunction(){
    ....bunch of code
    myClosure = {
       self.dismiss(blahBlahBlah)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这最终会导致保留循环,因为闭包保持对self的强引用,self是创建闭包属性的类.现在根据苹果来解决这个问题,我会定义一个类似的捕获列表

class SomeViewController{
  let myClosure:()->Void

  public func someFunction(){
    ....bunch of code
    myClosure = { [weak self] in
       self?.dismiss(blahBlahBlah)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意我如何在in语句之前放置[weak self].这使得闭包只知道对自身的弱引用而不是强引用.当封闭和自我生存相同的持续时间时,IM应该使用弱的时候自我可以关闭或无主.

我从这里获得此信息自动引用计数和该链接的强引用循环部分,这句话"如果你为一个类实例的属性分配一个闭包,那么一个强引用循环也会出现那个闭包抓住了实例"我大约90%确定我正确地理解了这一点,但只有10%的怀疑.所以我有这个正确吗?

我之所以这样问是因为我在视图中使用了一些回调函数.那些回调调用自己,但那个场景中的self是响应回调而不是实际视图本身的视图控制器.这就是我自己怀疑的地方,因为我从那句话突出显示我不认为我需要把[weak self]所有那些按钮回调,但我只是确定.这是一个例子

class SomeViewController {
    let someSubview:UIView

    override viewDidLoad() {
       //Some Subview has a button and in that view I just have some action that gets fired off calling the callback …
Run Code Online (Sandbox Code Playgroud)

closures retain-cycle swift

8
推荐指数
1
解决办法
2560
查看次数

标签 统计

swift ×2

closures ×1

retain-cycle ×1

swift2 ×1