专题课程
这是一系列短文中的第一篇,会简单介绍些你可能不知道的东西。我也会努力尝试穿插写些更深入的长文。
闭包封盖了局部环境变量,并为闭包内的代码创建了一个新的执行环境。Objective-C代码块或C#的lambda都是闭包的例子。假如你希望真正了解闭包,执行环境,命名绑定等,我推荐和。
通过标记self
为unowned或者用weak来打破 retain cycle,这种方法常常用来修改闭包捕获的这个 self 的属性
苹果官方语言指南要求如果闭包和其捕获的对象相互引用,应该使用unowned
,这样能够保证他们会同时被销毁。这大概是为了避免对象被释放后维护weak
引用空指针的开销。
大部分人没有意识到自己可以创建如下新的命名变量:
这避免了引用thing1
和thing2
时污染周围代码。作为加分项,thing2
还是个weak引用。
捕获列表需要尾随in
关键字,并且紧跟着参数列表假如你有需要: