OC block声明和使用
发布日期:2025-04-27 12:04:26 浏览次数:20 分类:精选文章

本文共 1824 字,大约阅读时间需要 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标记和块变量,我们可以实现变量在块内部的修改,提升代码的灵活性。同时,块的引用和指针使用也为代码的复用提供了可能性。在实际开发中,块的应用场景无处不在,从简单的数据处理到复杂的视图状态管理,都是可以的。

上一篇:OC Xcode快捷键
下一篇:ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。 将元素标记为过时可以通知用户:该元素在产品的未来版本中将被移除。...

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2026年06月12日 07时50分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章