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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月22日 01时23分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
有关矩阵低秩近似的一个不等式
2019-04-27
visio插入公式另存为出现斜方框
2019-04-27
Fast Randomized SVD
2019-04-27
最大连续子序列
2019-04-27
what are textons?
2019-04-27
JavaScript—事件函数
2019-04-27
给npm换成国内源,提高creat-react-app的安装速度
2019-04-27
VSCode中快速打开命令行终端的快捷键
2019-04-27
LeetCode——数组中数字出现的次数(JS实现)
2019-04-27
数据结构基础——栈
2019-04-27
剑指Offer——和为S的连续正数序列(JS实现)
2019-04-27
剑指Offer——二叉树的最近公共祖先(JS实现)
2019-04-27
React中使用nanoid生成唯一的id
2019-04-27
javascript中的splice方法与slice方法的区别
2019-04-27
剑指Offer——重建二叉树(JS实现)
2019-04-27
数据结构基础——队列
2019-04-27
JS中给数组中间添加元素的方法
2019-04-27
JS中使数组倒序排列
2019-04-27
JS中对数组进行排序(sort)
2019-04-27
JS中every()方法
2019-04-27