博客
关于我
OC block声明和使用
阅读量:796 次
发布时间:2023-02-22

本文共 1865 字,大约阅读时间需要 6 分钟。

#block和__block:iOS开发中块(Closure)的使用详解

在iOS开发中,块(Closure)是非常重要的一种编程结构,能够让开发者在不使用函数或类的前提下,定义一些可重用的代码逻辑。以下从基础到进阶详细解析block的使用方法。

1. block的基本定义

block是一种代码块,可以定义为变量,或者作为函数的返回值。最常见的block形式是一个匿名函数,使用^符号表示:

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

这里,Sum是一个block类型的变量,指向一个接受两个整数参数并返回它们和的block。这个block可以直接使用来计算任意两个整数的和。

2. 使用__block标记变量

有时候,我们需要在block内部修改外部变量,这时候就需要使用__block标记。例如:

__block int c = 15;
MySum sum = ^(int a, int b) {
c = 19;
return a + b;
};
NSLog(@"c is %i", c);

这里,c前面的__block标记告诉编译器,这个变量可以在block内部被修改。这种情况下,block内部能够修改c的值,并且可以在外部读取它。

3. 在主程序中使用block

在主程序中使用block的应用场景尤其多,比如按钮点击事件的处理:

int main(int argc, const char * argv[]) {
@autoreleasepool {
Button *btn = [[[Button alloc] init] autorelease];
btn.block = ^(Button *btn) {
NSLog(@"按钮-%@被点击了", btn);
};
[btn click];
}
return 0;
}

这里,btn.block被赋值了一个块,这个块会在按钮被点击时执行相应的代码。这种方式比传统的 delegate 模式更加灵活。

4. 补充内容:块的灵活应用

块不仅可以用于简单的数据处理,还可以用于更复杂的逻辑。例如,可以定义一个块来处理不同的视图状态:

int sum(int a, int b) {
return a + b;
}
void test() {
int (^Sum) (int, int) = ^(int a, int b) {
return a + b;
};
int c = Sum(10, 9);
NSLog(@"%i", c);
c = sum(10, 10);
NSLog(@"%i", c);
int (*sump) (int, int) = sum;
c = sump(9, 9);
NSLog(@"%i", c);
}

这里,Sum是一个局部定义的块,而sum是一个全局函数。通过将sum赋值给sump,我们可以将块和函数结合使用。

5. 定义块变量并使用指针

有时候,我们需要将块的功能抽象出来,使用指针来引用它。例如:

typedef int (^Sum) (int, int);
typedef int (*Sump) (int, int);
void test1() {
Sum sum1 = ^(int a, int b) {
return a + b;
};
int c = sum1(10, 10);
NSLog(@"%i", c);
Sump p = sum;
c = p(9, 8);
NSLog(@"%i", c);
}

这里,SumSump分别定义了块和指针类型。通过这种方式,我们可以在不同地方使用同一个块逻辑,提升代码的复用性。

6. 总结

块作为iOS开发中的一个强大工具,能够帮助开发者在不写函数的前提下完成大量工作。通过合理使用__block标记和块变量,我们可以实现变量在块内部的修改,提升代码的灵活性。同时,块的引用和指针使用也为代码的复用提供了可能性。在实际开发中,块的应用场景无处不在,从简单的数据处理到复杂的视图状态管理,都是可以的。

转载地址:http://mssfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现操作MySQL(附完整源码)
查看>>
Objective-C实现操作注册表 (附完整源码)
查看>>
Objective-C实现改变图片亮度算法(附完整源码)
查看>>
Objective-C实现数字图像处理算法(附完整源码)
查看>>
Objective-C实现数组去重(附完整源码)
查看>>
Objective-C实现数组的循环左移(附完整源码)
查看>>
Objective-C实现数除以二divideByTwo算法(附完整源码)
查看>>
Objective-C实现文件分割(附完整源码)
查看>>
Objective-C实现文件的删除、复制与重命名操作实例(附完整源码)
查看>>
Objective-C实现无序表查找算法(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现时间戳转为年月日时分秒(附完整源码)
查看>>
Objective-C实现是否为 Pythagoreantriplet 毕氏三元数组算法(附完整源码)
查看>>
Objective-C实现显示响应算法(附完整源码)
查看>>
Objective-C实现普通矩阵A和B的乘积(附完整源码)
查看>>
Objective-C实现更新数字指定偏移量上的值updateBit算法(附完整源码)
查看>>
Objective-C实现最大类间方差法OTSU算法(附完整源码)
查看>>
Objective-C实现最大非相邻和算法(附完整源码)
查看>>
Objective-C实现最小二乘多项式曲线拟合(附完整源码)
查看>>