iOS 学习之 Block

概述:

-代码块对象简称为"代码块".是对c语言函数的扩展.运行在iOS4.0和OS X10.6版本以上

-代码块实际上是c语言实现的,所以在各种以c作为基础的语言内都是有效的包括:object-c,c++,以及object-c++

-代码块本质是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码时,可以像调用其他函数一样,传入参数,并得到返回值.


函数指针 vs 代码块

函数指针的语法格式

返回值类型 (*函数名)(参数列表);

eg:void (*myFunction)(void);

代码块的语法格式

返回值 (^代码块名)(参数列表) = ^返回值类型 (参数列表) {表达式;};

eg: void (^myBlock)() = ^{printf("Hello,Block\n");}


说明:

返回值类型和参数列表都可以有条件的省略

省略返回值类型时,若表达式中有return语句就使用该返回值的类型,若没有,则为void

省略返回值类型时,若表达式中有多个return语句,则所有的语句返回值的类型必须相同

如果不使用参数,则参数列表也可以省略


dda  打a'd
代码块的使用

a.直接使用

void (^myBlaock)() = ^{printf("HEllo,world!\n");};

myBlock();


b.代码块的内联

NSArray *array = @[@"One", @"Two", @"Three", @"Four"];

NSLog(@"Sorted array: %@", sortedArray);

NSLog(@"Unsorted array: %@", array);

NSArray *sortedArray = [array

sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

return [obj1 compare:obj2];

NSLog(@"Sorted array :%@",sortedArray);


使用typedef定义相同类型的代码块
typedef void (^ChangelableText)(NSString *);

声明   ChangeLableText blk;

代码块的变量
-全局变量和静态变量在代码块内部可以正常使用(改其值)
-局部变量在代码块内部无法修改其值,原因是代码块的局部变量在编译阶段被看作位常量
-如果需要在代码块中修改局部变量,需要在局部变量前面加__block修饰符


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值