7

[weak self]作为参数传递给闭包与传递之间有什么区别[weak self] ()

例如 :

dispatch_async(dispatch_get_main_queue()) { [weak self] in 
     //Some code here
}

v/s

dispatch_async(dispatch_get_main_queue()) { [weak self] () -> Void in
     //Some code here
}
4

1 回答 1

9

您不会将[weak self] ()其作为参数传递给闭包。

  • [weak self]是一个捕获列表并且在
  • 参数列表/返回类型声明() -> Void

在闭包表达式中。

如果可以从上下文中推断出返回类型或参数列表和返回类型,则可以省略它们,因此所有这些都是有效且完全等效的:

dispatch_async(dispatch_get_main_queue()) { [weak self] () -> Void in 
    self?.doSomething()
}

dispatch_async(dispatch_get_main_queue()) { [weak self] () in 
    self?.doSomething()
}

dispatch_async(dispatch_get_main_queue()) { [weak self] in 
    self?.doSomething()
}

闭包接受一个空参数列表()并有一个Void 返回类型。

于 2015-12-16T07:00:22.220 回答