<pre code_snippet_id="449894" snippet_file_name="blog_20140813_1_1004310" name="code" class="objc"><span style="font-size:18px;">block:匿名函数. 不用在.h和.m中声明和实现的函数 可以直接在主函数中嵌套定义实现block的价值:block定义的函数不用在.h和.m中写声明和实现,可以直接在主函数中定义,即可以函数嵌套定义.它可以使用在实现一个函数的小步骤时,能够省略.h和.m中的代码,并且对于相同类型返回值和相同类型参数的一系列函数,可以只定义一个函数框架,随时调用的时候填写函数体拿来调用,节省时间.</span>
block的使用格式:返回值类型(^函数名)(参数类型) = ^(参数类型){ 函数体 };
使用时可以直接调用函数
例如:
<span style="font-size:18px;">int (^block2) (int x, int y) = ^(int x, int y) {
return x < y ? x : y;
};</span>
可以用typedef对block重命名
例:
<p style="margin-top: 0px; margin-bottom: 0px; font-family: MingLiU;"><pre name="code" class="objc"><span style="font-size:18px;">typedef int (^aa)();
aa sum = ^(int x, int y){
return x + y;
};
int sum1 = sum(5, 10);
NSLog(@"%d", sum1);</span>
注意点:
1.如果在block外面定义的局部变量在block内部使用且重新赋值时,要用__block对该变量进行修饰,如果不用__block修饰,系统默认该变量是一个readonly(只读的)类型的变量,在block内部可以使用但是不能重新赋值
2.如果是全局变量在block中使用,则不需要被__block修饰,可以直接使用,赋值
3.如果在.m文件中的全局变量,想在主函数中使用,可以在主函数的变量前加修饰词 extern (例如:extern int a)
4.如果在不同文件中祥使用相同名字的全局变量,可以再一个变量前加修饰词 static (例如:static int a)