自从 block
横空出世,它本身就封装了一段代码当做变量,Apple 导入 block 语法之后就大幅改变了撰写 Objective-C 语言的方法。
block 是Cocoa/Cocoa Touch Framework 中的匿名函式(Anonymous Functions)的实作。所谓的匿名函式,就是一段 具有物件性质的程式码,这一段程式码可以当做函式执行,另一方面,又可以当做物件传递;因为可以当做物件传递,所以可以让某段程式码变成是某个物件的某个 property,或是当做 method 或是 function 的参数传递,就是因为这种特性,造成最常使用 block 的时机,就是拿 block 实作 callback。
循环引用是指对象间相互强引用了对方,而导致双方都无法被释放。
block的循环引用,即如果我们在block中调用self,那么就产生了循环引用。
循环引用会造成APP的内存泄漏、消耗变高,使APP性能变差,用户体验不好,更坏的情况是造成APP闪退。
如何防止循环引用?