__weak typeof(self)修饰:
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [[BlockDemo alloc]init];
__weak typeof(BlockDemo) *weakDemo = demo;
[demo setExecuteFinished:^{
if (weakDemo.resultCode == 200) { // 这里调用.语法不会循环引用
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//方法二:
+ (BlockDemo *)blockdemo {
return OBJC_AUTORELEASE([[BlockDemo alloc]init]);
}
//这样用:
- (IBAction)onTest:(id)sender {
BlockDemo *demo = [BlockDemo blockdemo];//[[BlockDemo alloc]init];
[demo setExecuteFinishedParam:^(BlockDemo * ademo) { // 把自身传递回来
if (ademo.resultCode == 200) {
NSLog(@"call back ok.");
}
}];
[demo executeTest];
}
//不管是在外面init,还是在里面,且没有加__block 及__weak。如果是回调,比较喜欢把自身当作参数传到block中。这样期实是编译器给我们做了弱引用。因此不会产生循环引用。