1.错误日志
1> 在使用block时,随便写了以下代码,系统报错说“use of undeclared identifier ‘read1’;did you mean ‘read’? ”
int (^listAandb)(int,int) = ^(int a,int b){
NSLog(@"a is %i,b is %i",a,b);
return 0;
};//此处的分号千万别忘记
listAandb read1;
read1(2,3);
2> 后来才发现我把listAandB
当成了一个类型名,实则不然,它只是一个地址,一个函数名。要想成为一个类型名必须使用typedef。
3> 应该这样修改
int (^listAandb)(int,int) = ^(int a,int b){
NSLog(@"a is %i,b is %i",a,b);
return 0;
};//此处的分号千万别忘记
listAandb(2,3);
4> 若想把block定义成一个类型,可以这样:
//1.让listAandb变成一个类型
typedef int (^listAandb)(int,int);//此处的分号千万别忘记
//2.声明一个listAandb变量并赋值
listAandb list1 = ^(int a,int b){
NSLog(@"a is %i,b is %i",a,b);
return 0;
};//此处的分号千万别忘记
//3.调用刚刚的变量
list1(2,3);
5> 这里的typedef类似于静态变量,在其作用域内使用。类似于以下代码:
//1.让StudentInfo变成一个类型
typedef struct {
int age;
int no
}StudentInfo;
//2.声明一个StudentInfo变量并赋值
StudentInfo stu = {23,256};
//3.调用刚刚的结构体变量
NSLog(@"stu.no:%i",stu.no);
2.经验教训
1> 知识一定要掌握扎实,举一反三,不要凭感觉做事。
2>一定要像达芬奇画鸡蛋一样,哪怕重复N遍,也要把一件事做好。也就这几年北漂的时光了,一定要更有意义。