1. 如何修改外部block的外部变量:加上__block
int main(int argc, const char * argv[]) {
@autoreleasepool {
__block int a = 100;
void (^block)() = ^{
a = 10;
NSLog(@"a = %d",a);
};
block();
}
return 0;
}
2.block作为参数被传递时,block不能为空,要对block做为空判断
#import <Foundation/Foundation.h>
void goToWork(void (^work)())
{
NSLog(@"刷牙洗脸吃饭");
work(); //这里会报错,EXC_BAD_ACCESS
NSLog(@"下班回家睡觉");
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// goToWork(^{
// NSLog(@"上班");
// });
goToWork(nil);
}
return 0;
}
加上判断即可:
void goToWork(void (^work)())
{
NSLog(@"刷牙洗脸吃饭");
if (work != nil)
{
work();
}
NSLog(@"下班回家睡觉");
}
__weak typeof(self) weakSelf = self;