Objective-C---6---Block
发布日期:2022-02-08 18:03:22 浏览次数:37 分类:技术文章

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

1. block

1. Block本质上是匿名函数,定义在main函数内部,和C语言的函数还是有区别的

/*         写⼀个 返回值为整型 参数为OC字符串(仅一个参         数)的block,实现将字符串转换为整型的功能。        */        int (^stringToInt)(NSString *) = ^(NSString *str){            return [str intValue];        };        int a = stringToInt(@"123456987654");        NSLog(@"%d",a);

2. 使用typedef定义block:

typedef int(^twoNumbers)(int ,int);twoNumbers subValue = ^(int a, int b){            return a - b;        };        NSLog(@"%d", subValue(12, 3));
3. 在block内部可以访问外部变量:

// 访问外部变量:        void (^MyBlock)() = ^{            NSLog(@"%@", str);        };        MyBlock();

4. 变量地址是否相同:

// 访问外部变量时,地址是同一个吗:        int b = 6;        NSLog(@"外部地址:%p", &b);        void (^MyBlock)() = ^{            NSLog(@"内部地址:%p", &b);        };        MyBlock();  // 结果是:外部地址:0x7fff5fbff7ac     内部地址:0x7fff5fbff798   两个地址不一样

5.修改局部变量: __block

//  修改外部变量:        __block int c = 0;        twoNumbers subValue = ^(int a, int b){            c = a - b;            return c;        };        subValue(12, 3);        NSLog(@"%d", c); // 结果是:9

总结:

在block内部可以访问外部变量,

在block内部不能修改局部变量的值,

block内部访问变量的地址和外部变量本身的地址不一样,相当于拷贝了一份,

如果想在block内部对外部变量进行修改:有两种方法:   ----a:将外部变量定义为全局变量    ------b:在外部变量前加__block

2. block与数组排序:

#pragma mark--- block与数组排序        {// 1. 第一种排序方法: 自己写的方法  直接调用        NSArray *array = [NSArray arrayWithObjects:@"sd", @"gf", @"bgf", @"sadf", nil];                NSComparator com = ^(id str1, id str2){            return -[str1 compare:str2];        };                NSArray *sortArray = [array sortedArrayUsingComparator:com];        NSLog(@"%@", sortArray);                        // 2. 第二种排序:系统的不用自己定义方法            NSArray *sortArray2 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {                return [obj1  compare:obj2];            }];            NSLog(@"sortArray2:%@", sortArray2);      }

3. iOS中的字面量:

字面量是⼀种新型的写法,能在⼀定程度上简化代码。

字面量创建的对象是便利构造的,且是不可变的。

例如:字典,集合,字符串,数组,等的简单创建就是使用了字面量

转载地址:https://blog.csdn.net/Evelynzn/article/details/48829101 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Objective-C---7---NSDate Protocol Category
下一篇:Objective-C---8---@property KVC

发表评论

最新留言

不错!
[***.144.177.141]2024年04月22日 01时23分10秒