Block
查看变量的数据类型的方法:
如:int* p;
整型指针的变化总结:
整型-》指向整型的指针
1.拷贝整型的声明 int a;
2.将变量名称换个名字 int q;
3.给变量加一个括号 int (q);
4.在变量的前面加一个*号 int (*q);
回顾:C中的函数作为一个参数:intsub(intfunc1(void),MySum_tfunc2);sub函数的两个参数都是函数。 第二个参数有些特殊,它是一个函数类型被改名后的函数。它原来可能是这样的:intfunc(int,int); 被用typedef修改后变成了这样:typedefintMySum_t(int,int) 这里有一个规则:
函数指针:
// 函数指针
int(*sub1)(intfunc1(void),MySum_tfunc2);
sub1 = ⊂
NSLog(@"%d",(* sub1)(func6,func5));与原函数的效果是一样的。就如同整型指针的用法:
inta =1;
int* p = &a;
NSLog(@"a=%d",a);
NSLog(@"*p=%d",*p);还有稍微简单的例子,方便与理解:
int(*add)(int,int);
add = ∑
NSLog(@"add=%d",add(6,4));
NSLog(@"sum=%d",sum(6,4)); 输出的结果是一样的。
函数指针的赋值有两种方式:首先func是一个函数指针,1.func = &func1; 2.func = func. 函数指针的调用有两种方式:1.func(); 2.*func();
函数指针和block的相似之处:^和*
如何看一个变量的类型总结:要查看谁的数据类型,将其除去,剩下的部分就是它的数据类型。如: int * p. p的数据类型就是int *
block的格式:返回值类型 (^block名) (参数);void(^block)(void);如果block比较复杂,还可以利用typedef对其(类型)进行改名:typedefvoid(^MyBlock_t)(void); 这样MyBlock就成了这样void(^block)(void);的一个block了,可以利用MyBlock定义新的block。
typedef用法的回顾:如:将int类型重命名。 typedef int myInt; myInt a; 这样定义的变量a就是整型的。注意:查看等价关系:别名 和 除去别名、typedef剩下的东西等价。 如上面的myInt和int是等价的。
block的声明:返回值类型 (^块名) (参数的类型)
block的赋值:^返回值类型 (参数) {具体实现的内容};赋值语句写完要写封号。
block声明和赋值可以写在一起,例子:(当返回值类型和参数为空时可以省略)
void(^ block2)(void)= ^void{
NSLog(@"将声明和赋值写在一起");
};
调用块:block2();
block的访问权限:
对于普通变量,在block中只能对其进行访问,而不能更改,要想对其更改,需要在外部变量名前加__block.注意:是两个下划线。
block可以作为函数的参数:
block:
block是用来保存代码的。 block的标志:^。不是普通的代码块。
(一下都是官方的标准定义)
1.block封装了一段代码,可以在任何时候执行。(很像一个函数——可以保存代码,有参数,有返回值)
2.block可以作为函数参数或者函数的返回值,而其本身又可以带参数和返回值。苹果官方建议多使用block。