A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© paradise6 中级黑马   /  2015-8-6 07:30  /  324 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

block基本使用
#import <Foundation/Foundation.h>
int main()
{
//block用来保存一段代码
//block的标志:^
/*
block跟函数很像:
1. 可以保存代码
2. 有返回值
3. 有形参
4. 调用方式一样
*/
//定义block变量
//返回值int类型,两个int类型的形参
int (^sumblock) (int, int)=^(int a, int b){
return a+b;
}
//利用block变量调用block内部的代码
int c = sumblock(10, 11);
NSLog(@”%d”, c);
return 0;
}
对比:block与指向函数的指针相似(一个是*另一个用^
int sum(int a, int b)
{
return a+b;
}
int (*p) (int, int)=sum;
int d=p(10, 12);
NSLog(@”%d”, d);
练习:用一个block输入n条横线
int main()
{
void (^lineBlock) (int) = ^(int n)
{
for (int i=0; i<n; i++)
{
NSLog(@”----------------”);
}
}
return 0;
}
注意:如果没有形参,可以省略^后的()
void (^myblock) () = ^()                        //这个()可以省略
{
NSLog(@”----------------”);
}
那么代码为:
void (^myblock) () = ^
{
NSLog(@”----------------”);
}
Block访问外面变量
int mian()
{
int a=10;
_block int b=20;
void (^block)();
block=^{
//block内部可以访问外面的变量
NSLog(@”a=%d”, a);
//默认情况下,block内部不能修改外面的局部变量
a=20;                //错误写法,可访问不可修改
//给局部变量加上_block关键字,这个局部变量就可以在block内部修改
b=25;
}
block();                //没有形参时,block这么调用
return 0;
}
使用typedef定义block类型
typedef int (^MyBlock) (int, int);
int main()
{
MyBlock sumBblock=^(int a, int b)
{
return a+b;
}
MyBlock minusBlock=^(int a, int b)
{
return a-b;
}
int sum=sumBlock(10, 8);
int minus=sumBlock(12, 9);
NSLog(@”%d----%d”, sum, minus);
return 0;
}
Block 总结
[size=10.5000pt]1. block要掌握的东西
1>如何定义block变量
int (^sumBlock) (int, int);
void (^myBlock) ();
2>如何利用block封装代码
^(int a, int b) {
return a+ b;
};
^() {
NSLog(@”---------------”);
};
^ {
NSLog(@”---------------”);
};
3> block访问外面变量
* block内部可以访问外面的变量
* 默认情况下,block内部不能修改外面的局部变量
* 给局部变量加上_block关键字,这个局部变量就可以在block内部修改
4> 利用typedef定义block类型
typedef int (^MyBlock) (int, int);
//以后就可以利用MyBlock这种类型来定义block变量
方式1
MyBlock b1, b2;
b1=^(int a, int b) {
return a+b;
};
方式2
MyBlock b3=^(int a, int b) {
return a -b;
};

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马