因为在block函数中会使调用对象retain,因此处理不当就容易造成内存泄露,如下语句:
button.block=^(BlockButton *btn) { [self dismissViewControllerAnimated:YES completion:nil]; };block会使内部变量retain,从而内存泄露,解决该问题的方法是将变量用__block声明,正确做法如下所示:
__block UIViewController *viewController=self; button.block=^(BlockButton *btn) { [viewController dismissViewControllerAnimated:YES completion:nil]; };
block和delegate的区别:
block和delegete都是描述两个对象之间的1对1的关系,当两个对象之间通信内容很多时,优先采用delegate,因为通信内容多,每次通信都要写一个block,这样太复杂,如果通信不是很多,可以采用block方法,例如在写UIView的动画时,利用block方便简洁