Objective-C(13)代码块---block

  • block类型

block是一种数据类型,在iOS开发中广泛使用且被苹果公司极力推荐使用,其功能很像C语言中的函数指针。

^ 是block的特有标志。

block的实现代码包含在{ }中。

大多数情况下,以内联的形式被定义及使用。

void (^demoBlock)() = ^ {
    NSLog(@"demo Block");
}
int (^sumBlock)(int, int) = ^(int x, int y) {
    return x + y;
}

block的使用和函数指针的使用类似

int (^sumblock)(int, int) = ^(int a, int b) {
    return a>b?a:b;
}
int c = sumblock(10, 20);
NSLog(@"c=%d", c);

block内部可以访问外部的变量

外部的局部变量,block内部不能修改,全局变量可以。

如果局部变量使用__block声明,则可以在内部修改。

int a = 10;
__block int b = 20;
void (^myblock)();
myblock = ^ {
    NSLog(@"a=%d", a);
    b = 20;
}
myblock();

实际上,定义block时会对局部变量进行拷贝(副本)

block的重要意义:在处理异步任务时非常方便,这也是block应用的难点

时间: 2024-10-24 06:50:58

Objective-C(13)代码块---block的相关文章

iOS学习之代码块(Block)

代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: 1 int local = 1;//注意:全局变量 2 void (^block0)(void) = ^(void){ 3 local ++; 4 NSLog(@"local = %d",local); 5 }; 6 block0(); 7 NSLog(@"外部 local = %d",lo

Objective-C 代码块(block)的使用

代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码).下图是如何把块变量赋值给一个变量的语法讲解: 按照调用函数的方式调用块对象变量就可以了:int result = myBlock(4); // result是 28 1.参数是NSString*的代码块 [cpp] view plaincopy voi

[转]iOS代码块Block

代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD.动画.排序及各类回调 注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码 Block变量的声明.赋值与调用 Block变量的声明 Block变量的声明格式为: 返回值类型(^Block名字)(参数列表); /

Objective-C - 代码块block

代码块block /* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); void (^myBlock)(); 2> 如何利用block封装代码 ^(int a, int b) { return a - b; }; ^() { NSLog(@"----------"); }; ^ { NSLog(@"----------"); }; 3> block访问外面变量 * block内部可以访问外

一篇文章看懂iOS代码块Block

iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD.动画.排序及各类回调 注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码 Block变量的声明.赋值与调用 Block变量的声明 Block变量的声明格式为: 返回值类型(^Bl

Objective-C语法之代码块(block)的使用

代码块本质上是和其它变量相似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你能够像调用其它标准函数一样,传入參数数,并得到返回值. 脱字符(^)是块的语法标记.依照我们熟悉的參数语法规约所定义的返回值以及块的主体(也就是能够执行的代码).下图是怎样把块变量赋值给一个变量的语法解说: 依照调用函数的方式调用块对象变量就能够了:int result = myBlock(4); // result是 28 1.參数是NSString*的代码块 void (^printBlock)(NSStr

Objective-C语法之代码块(block)的使用(转)

代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码).下图是如何把块变量赋值给一个变量的语法讲解: 按照调用函数的方式调用块对象变量就可以了:int result = myBlock(4); // result是 28 1.参数是NSString*的代码块 void (^printBlock)(NSStr

Objective-C语法之代码块(block)的使用 (转载)

代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码).下图是如何把块变量赋值给一个变量的语法讲解: 按照调用函数的方式调用块对象变量就可以了:int result = myBlock(4); // result是 28 1.参数是NSString*的代码块 [cpp] view plain copy vo

Objective-C 14 代码块Block

Blocks Block 代码段 Block封装了一段代码,可以在任何时候执行.它是对C语言中函数的扩展,它实际上是C语言实现的,所以它在各种以C作为基础的语言哪都是有效的,包括Objective-C.C++以及Objective-C++. Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别: block是内联函数的,并且默认情况下它对局部变量是只读的. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转

代码块(block)简介

代码块是对C语言中函数的扩展,由C语言实现,所以在以C为基础的语言内都是有效的,包括Objective_C,C++和Objective-C++,在Xcode的GCG与Clang工具中是有效的,但这不属于ANSI的C语言标准. 代码块借鉴了函数指针的语法,所以声明方法与之类似.如: 函数指针:void *(my_func)(void){/*放代码*/}; 只要把“*”替换成"^"(幂符号)就可以把它转换成一个代码块的定义了.如: 代码块:void ^(my_block)(void){/*