OC06 Block
来源:互联网 发布:nfc读卡软件 编辑:程序博客网 时间:2024/05/29 13:40
// OC06 Block、数组高级
#import <Foundation/Foundation.h>
#pragma mark -block变量类型的重命名方法
// block变量类型的重命名:方法和函数指针类型重命名一样
// 将有一个整形返回值和两个整形参数的函数类型,取了一个新名字:MYBLOCK
typedefint(^MYBLOCK) (int,int);
//typedef int(^kMyBlock) (int, int); // 也可用驼峰命名法命名
int c =11;
int main(int argc,const char * argv[]) {
#pragma mark -Block语法
/*
1、在C语言中,我们可以使用函数指针指向一个函数,这样我们就能通过函数指针来调用这个函数。(将函数名交给函数指针)
2、如果函数没有函数名,也就是匿名函数。匿名函数在C中是不合法的,也无法直接调用或通过指针调用。但是,在OC中,我们可以通过Block变量来保存这个匿名函数,在之后合适的地方通过Block变量名来调用这个函数
*/
#pragma mark --定义一个block变量
// 定义block变量的方法和定义函数指针的方法一样,唯一不同的是,函数指针使用*,block变量使用^将后边的字符声明为block变量名。
int (^myBlock)(int,int);
#pragma mark --将同类型的函数(匿名函数)赋值给block变量
/*
^int (int a, int b)
1、"^"将函数声明为block变量的值,如果没有托字符,则这个函数无法赋给block变量
2、匿名函数的返回值类型可以省略,但是参数类型和参数的名字不能省略
*/
myBlock = ^int (int a,int b){
return a + b;
};
#pragma mark --调用block变量
/*
调用block变量方法和调用函数指针、函数名的方法一样,通过变量名来调用,如果有参数,需要向代码块中传递参数
*/
int result = myBlock(12,23);
NSLog(@"%d", result);
//练习1:写一个返回值为整型参数为OC字符串(仅一个参数)的block,实现将字符串转换为整型的功能。
// 1、声明block变量
int (^block1)(NSString *str);
// 2、调用
block1 = ^int (NSString *str ){
return [strintValue]; // intValue方法:将字符串转换为整形
};
NSLog(@"%d", block1(@"1213"));
#pragma mark -使用typedef之后的新类型名定义一个block变量
MYBLOCK block = ^(int a,int b){
return a * b;
};
NSLog(@"%d",block(4,5));
#pragma mark -在block中使用变量
/*
在block内部可以访问局部变量和全局变量,但是只能修改全局变量,如果想修改局部变量,需要在局部变量前使用__block来修饰。
*/
__blockint a = 10;// 使用__block修饰的局部变量可以在block内部被修改
void (^demo)() = ^(void){
NSLog(@"a = %d", ++a);
NSLog(@"c = %d", ++c);// 因为c是全局变量,所以可以直接在block内部被修改
};
demo();
return 0;
}
- OC06 Block
- OC06 -- 字典
- OC06 内存管理学习
- OC06 数组高级
- iOS OC06.2_字典
- iOS学习笔记基础-oc06内存管理
- 【OC06】类目、延展、协议、计时器(连载八)
- Block
- block
- Block
- block
- block
- block
- block
- block
- block
- Block
- block
- Android Volley 网络请求框架图
- OC05 for_in快速遍历技术
- SVN用命令注册Window服务
- 桥接模式与适配器模式辨析
- KMP模板
- OC06 Block
- 12 个非常实用的 jQuery 代码片段
- select下拉联动 (Bootstrap、JQuery插件之cxselect)
- 最新阿里云推荐码,阿里云9折优惠码分享 : 2GHQXP
- C#学习笔记 常用的集合
- OC06 数组高级
- Json使用整理
- Google Interview Questions: Software Engineer
- 最大生成树(Greedy Algorithm)