标签:objective c block
Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象;它也很像C++中的函数对象,因为除了要执行的代码,block还可以携带和block绑定的状态信息。
// 将block块赋值给一个变量testblock,然后直接通过变量来调用代码块中的代码
int(^testblock)(int a, int b) = ^(int a, int b){
return a + a + b * a;
};
NSLog(@"\n------testblock代码块执行方法为:%d", testblock(3,6));// 在很多情况下,我们并不需要将block宣告成变量,我们可以直接在需要使用block的地方用内嵌的方式将block的内容写出来.
// 注意:在直接写代码块的时候,这个代码块是否有返回值,返回值的类型都是在一开始定义的函数中写好了的。
/*[[TTIHttpClient shareInstance] getTopNewsRequestwithpage:(int) withpagesize:(int) withSucessBlock:^(TTIRequest *request *request, TTIRequest * response) successBlock withFailedBlock:^(TTIRequest *request *request, TTIRequest * response) failedBlock
[[TTIHttpClient shareInstance] getTopNewsRequestwithpage:1 withpagesize:PAGESIZE withSucessBlock:^(TTIRequest *request, TTIResponse *response) {
NSArray *results = [response.result objectForKey:@"result"];
//存进缓存文件中
[ICDataStorage saveArray:results forKey:HEADNEWSLISTCACHE];
} withFailedBlock:^(TTIRequest *request, TTIResponse *response) {
}];
*/
在block内只能读取在同一个作用域的变数而且没有办法修改在block外定义的任何变数,此时若我们想要这些变数能够在block中被修改,就必须在前面挂上__block的修饰词
int number1 = 1;
__block int number2 = 2;
void(^block__test)() = ^(){
number1++;//这句话不可以执行,因为没有 __block 前缀
number2++;
};
block__test();//调用代码块
NSLog(@"%d", number1);
NSLog(@"%d", number2);
标签:objective c block
原文地址:http://blog.csdn.net/daiyibo123/article/details/44019615