代码块

本文详细介绍了 Objective-C 中 Block 的使用方法,包括 Block 的声明、定义、使用及访问变量的方式。此外还讲解了如何利用 Block 实现多线程,并深入探讨了不同类型的调度队列及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码块书写格式:<returntype>    (^name)(parameter list) = ^(parameter list) {body}     (返回值的类型可以推导   没有参数则后边的list可以省略   ^只有声明的时候使用)

使用代码块就是使用函数指针一样  也可以typedef 定义为新的类型


代码块是对象 可以发送消息

Block_release(blockname)


代码块访问变量:

本地变量:代码块生命范围内的变量    代码块会将这个范围内的变量都拷贝保存起来一份

参数变量:就是和函数参数一样

全局变量:也没啥特殊的

__block变量:当想要修改本地变量的值 要用__block    限制:长度可变的数组   含有长度可变数组的结构体   不可以定义为__block类型



多线程

1.简单的多线程实现方式:

performselectorinbackground:withobject:  这种方法通过在后台创建一个线程运行方法   又自己的自动释放池    没有返回值  并且至多拥有一个参数

这种方式实现的多线程 当线程结束时会释放自动释放池   但是不会通知你


2.调度队列

连续队列:遵循FIFO   不会产生死锁

并发队列:遵顼FIFO  但是队列中的多个任务可以同时执行

主队列:程序的主线程相关


dispatch_retain  dispatch_release 用来管理队列的引用计数   但是只能修改自己创建的队列  不能修改系统创建的队列


队列上下文:其实就是调用系统函数  将一些数据关联到队列上    关联对象的内存管理由你来处理


清理函数:当对象不在需要设备上下文的时候  让其调用清理函数  将设备上下文对象清理 (类似于dealloc)

__bridge_transfer:将对象内存管理由全局释放池转变为我们的函数  当函数结束时 自动释放池会将这个对象的引用计数-1

——bridge:通知arc这个对象内存由系统管理 


3.添加任务

同步添加:需要等待前边的任务执行完  它才执行

异步添加:不会等待  执行后立刻返回

参数为:队列名     函数指针对象/代码块对象

dispatch_sync_f  添加同步任务(函数形式)

dispatch_async_f

dispatch_sync 添加同步任务(代码块形式)

dispatch_async





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值