您的位置:首页 > 其它

OC-Block

2015-07-09 08:04 344 查看
1.作用:

Block用来保存一段代码,方便程序随时调用,标志为^。

定义Block变量:

void (^名称)(形参 ) = ^{

}

eg:

int (^myblock)(int,int) = ^(int a,int b){
return a+b;
};

利用block调用block内部代码:myblock();

(1)定义block变量

1> int (^sumblock)(int ,int ); // 有形参

2> void(^myblock)(); // 无形参

(2)利用block封装代码3种方法

1> 有形参

eg:

^(int a, int b){
return a - b;
}; // 有形参

2>无形参

^( ){
NSLog(@"-------");
}; // 无形参

3>无形参

^{
NSLog(@"-----");
}; // 无形参

(3)block访问外面变量

1> block内部可以访问外面的变量

2>默认情况下,block不能修改外面的局部变量。

eg:

int b = 15;
void (^myblock)=^{
block b;// 如果在myblock在局部变量前声明_block,则可以直接修改
b = 16; // 不能直接修改外部的局部变量、
}

3> 局部变量加上__block,则block内部变量可以修改此局部变量

(4)利用typedef定义block类型

typedef int (^myblock)(int , int ) ; // myblock是block的名字 有形参

2.block跟函数比较:

1>相同点

(1)可以保存代码

eg:

void(^myblock)()
{
NSLog(@"----------"); // 保存此段代码块
};

(2)有返回值

eg:

int (^myblock)(int,int) = ^(int a,int b){
return a+b;
};

上述代码返回值为int类型

(3)有形参

eg:

int (^myblock)(int,int) = ^(int a,int b){
return a+b;
};

上述代码形参为a和b

4)调用方式一样

eg:

myblock(10,11 );

2>不同点

(1)block的标识符是^,而函数没有

(2)block默认情况下不能修改局部变量,而函数在默认情况下可以修改成员变量。

(3)在block情况下,当语句结束时,需要在大括号外部添加分号,而函数不需要。

3.总结:

优点:可以方便程序随时调用某段代码或者某个功能,提高了程序编写效率,减少了程序的垃圾代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: