进击的KFC:OC(六)Block

2023-12-22 08:38
文章标签 block oc kfc 进击

本文主要是介绍进击的KFC:OC(六)Block,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pragma mark ——– Block语法

一.Block的定义:
Block:块语法,本质上是匿名函数(没有名称的函数).Block语法和函数指针很相似。

课程回顾:函数

函数:C语⾔中,实现某⼀功能的代码段。
完整的函数包含两部分:函数声明、函数定义
函数声明,即函数原型。例如:int sum(int x,int y);具有两个整型参
数,⼀个整型返回值的函数。
函数定义,即函数实现。例如:int sum(int x,int y){retrun x + y;}

课程回顾:函数指针:

函数指针(变量):存放函数地址(函数名)的指针变量。
int (*p)(int x,int y) = sum;
函数指针类型:int (*)(int x,int y) 即:指向 两个整型参数,⼀个整
型返回值 函数 的指针。
函数指针变量:p
函数指针的值:sum

Blcok语法;
这里写图片描述
Block详细:
1.Block 标志:^
2.Block保存的是:有特定功能的函数体
3.数据类型 + 变量名 = 初值;
4.初值部分 是一个没有名字的 函数体 并且类型与Block类型相同
5.匿名函数就是函数 其函数中定义的变量,存在栈区

pragma mark ——– Block的使用

实例:

// 写⼀个 返回值为整型 参数为NSString(仅⼀个参数)的block,实现将字符串转换为整型的功能NSInteger (^blockReturnInt)(NSString *str) = ^NSInteger (NSString *str){        NSInteger result = [str intValue];return result;};   NSLog(@"%ld",blockReturnInt(@"KFC"));

Block进⾏typedef

typedef NSInteger (^MyBlock)(NSString *str)
原类型:NSInteger (^)(NSString *str)
新类型:MyBlock
以后创建新的Block可以这样写: MyBlock block2 = ^NSInteger(NSString *str){NSInteger result = [str intvalue];return result; 
};
                    Block与局部变量:

这里写图片描述

这里写图片描述

这里写图片描述

                    Block与全局变量:

这里写图片描述

pragma mark ——– Block与数组排序

 block的好处:1.当把Block当作参数 传入方法中2.非常灵活 可以灵活掌控Block的实现3.也就是 你传入的Block实现的是声明功能,你这个方法 就实现什么功能Block;用处之一就是排序.实例:
   NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"7",@"4",@"6", nil];// 系统方法实现:[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2){// 交换位置// 实现部分,填写obj1 和 obj2 的关系// 实现原理: 数组中两个元素进行比较// 比较后 返回值 如果前面比后面大 则交换// 经此比较到最后一个元素 完成排序
// compare:可以比较的类型:1.字符串类型(NSString *) 2.NSNmuber *类型NSString *str1 = (NSString *)obj1; // 类型转换,看数组中存放的是什么类型,就把obj转换对应的对象类型NSString *str2 = (NSString *)obj2; {return NSOrderedDescending;}else if([str1 compare:str2] < 0){return NSOrderedAscending;}elsereturn NSOrderedSame;}];NSLog(@"%@",array);// 自定义Block方法的实现:
NSComparisonResult (^MyCompare)(id obj1,id obj2) = ^NSComparisonResult(id obj,id obj2){// 先确定类型NSNumber *num1 = (NSNumber *)obj1;NSNumber *num2 = (NSNumber *)obj2;if([num1 compare:num2] > 0){return NSOrderedDescending;  }else if([num1 compare:num2] < 0){return NSOrderedAscending;}elsereturn NSOrderedSame;
};// 需要什么类型 咱就给什么类型 就行[array sortUsingComparator:MyCompare];NSLog(@"%@",array); 

pragma mark ——– 字面量

// 切记:字面量使用的初始化方法 是类方法初始化
NSArray *array = [NSArray arrayWithObiects:@“1”,@“2”,nil];
相当于:
NSArray *arrayNew = @[@“1”,@“2”];
//取出一个元素
[arrayNew objectAtIndex:0]; 相当于: arrayNew[0];

总结:
block是苹果最推崇的语法,iOS4.0之后的类都添加了block⽀
持。block通常当参数来使⽤。
字⾯量是⼀种新型的写法,能在⼀定程度上简化代码。
字⾯量创建的对象是便利构造的,且是不可变的。

这篇关于进击的KFC:OC(六)Block的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/523300

相关文章

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

block对变量捕获的方式

之前见很多文章对block捕获变量的方法,会进行诸如此类的描述:“block会捕获被引用的变量, 并对其进行copy操作, 因此, 可能会导致其引用计数加1,如果处理不好, 可能因循环引用导致内存泄漏。” 实际上, 这种说法并不严谨。block对变量的捕获, 根据变量类型的不同,会采用不同的捕获方式。 (1)静态或者全局变量, 在block中直接是指针传递的方式传入block中,对其进行的操作

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

保姆级教学:OC监听网络状态变化 Reachability监听网络变化 ios网络变化

本文主要讲解了,在oc开发中,怎么去使用代码进行网络监听,十分的通俗易懂。 首先,在xcode工程中导入SystemConfiguration框架。 然后导入Reachability.h文件。 Reachability文件 点击下载,也可以按照如下内容创建对应的文件。 Reachability.m //文件名Reachability.m/*Copyright (C) 2016 App

oc中关于pch文件

pch 可以用来存储共享信息,比如设备屏幕的宽度,高度。版本号等等 公用信息 Xcode 老版本会自动为我们创建pch文件,新版本开始不自动创建了,如果需要使用可以自己手动创建 创建完成后可以在里面定义常量 此处以屏幕尺寸为例 如下 代码如下: 复制代码代码如下: //获取屏幕 宽度、高度 #define SCREEN_FRAME ([UIScreen

oc 图片变黑白

理论依据: 所谓颜色或灰度级指黑白显示器中显示像素点的亮暗差别,在彩色显示器中表现为颜色的不同,灰度级越多,图像层次越清楚逼真。灰度级取决于每个像素对应的刷新 存储单元的位数和显示器本身的性能。如每个象素的颜色用16位 二进制数表示,我们就叫它16位图,它可以表达2的16次方即65536种颜色。如每一个象素采用24位二进制数表示,我们就叫它24位图,它可以表达2的24次方即16777

OC中数组、字典、集合常用方法的运用

/* ====================== 一 NSArray========================          1.创建对象          1.1初始化方法(2) //一般程序有问题先检查初始化          1.2类方法          1.3字面量方法          2.数组查找          2.1通过下标访问对象[ .[i]]

iOS开发:OC篇:常用字符串方法的运用

1 NSString   .1创建 alloc init stringWith   .2获取长度.length   .3获取字符 characterAtIndex   .4前缀和后缀的判断 hasPrefix hasSuffix   .5某个字符串在另一个字符串的范围(range)(NSMakeRange) rangeOfString   .6截取(sub) substringFro

Oracle - ORA-01789: Query block has incorrect number of result columns

一、原因     这个错误一般是在执行表之间的相加(union),相减(minus)等SQL语句时,两个个查询块具有不一致的结果列数所导致的。 二、方案     只要将两段SQL语句的列数调整为一致就可以解决。使用union时,要注意数据库字段的格式要一致,如varchar和nvarchar是不一样的。

OC中的分类与类扩展

在OC中,对于已有的类进行扩展,我们有两种方式: 1、在原始类的定义中,进行代码扩展。 2、通过继承的方式,扩展子类。 3、使用分类的方式。 第一、二种方式不用多说,第三种方式则是OC中比较有特色的功能。 分类允许我们在不更改类的原始代码的情况下,实现对类的功能扩展,包括:添加实例方法,类方法与实例变量,属性(添加实例变量与属性需要匿名分类——类扩展)。 如何定义分类\类扩展