03-Block的使用场景

iOS面试:在block内如何修改block外部变量? 在多线程环境中,直接修改外部变量可能引发竞争条件(race condition)。此外,为了保持代码的安全和可读性,尤其是在多线程环境中,应考虑对变量的线程安全性。内部想要修改外部变量时,必须遵循一些规则。是一种在封装了执行代码的结构,用于处理异步操作、回调等场景。将捕获外部变量的值(即强引用),因此无法直接修改该变量。中对外部变量进行修改,以满足具体的业务需求。内部修改外部变量,最简单的方法是使用。中修改外部变量时,最佳实践是使用。在这个示例中,我们定义了一个。修饰符,使变量的值能够在。 阅读详情
//
//  main.m
//  03-Block的使用场景


#import <Foundation/Foundation.h>

/**
 模拟星期一上班的具体情况
 */
void goToWorkInDay1()
{
    NSLog(@"起床");
    NSLog(@"刷牙");
    NSLog(@"穿衣服穿鞋");
    
    NSLog(@"出门");
    NSLog(@"搭公交");
    
    NSLog(@"抵达公司");
    
    // 实事
    NSLog(@"了解项目的需求");
    // 实事
    
    NSLog(@"叮咚叮咚 下班了");
    NSLog(@"搭公交");
    NSLog(@"回家");
    NSLog(@"睡觉");
}

void goToWorkInDay2()
{
    NSLog(@"起床");
    NSLog(@"刷牙");
    NSLog(@"穿衣服穿鞋");
    
    NSLog(@"出门");
    NSLog(@"搭公交");
    
    NSLog(@"抵达公司");
    
    // 实事
    NSLog(@"熟悉公司以前的代码");
    // 实事
    
    NSLog(@"叮咚叮咚 下班了");
    NSLog(@"搭公交");
    NSLog(@"回家");
    NSLog(@"睡觉");
}

void goToWorkInDay3()
{
    NSLog(@"起床");
    NSLog(@"刷牙");
    NSLog(@"穿衣服穿鞋");
    
    NSLog(@"出门");
    NSLog(@"搭公交");
    
    NSLog(@"抵达公司");
    
    // 实事
    NSLog(@"开始编写代码");
    // 实事
    
    NSLog(@"叮咚叮咚 下班了");
    NSLog(@"搭公交");
    NSLog(@"回家");
    NSLog(@"睡觉");
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        
    }
    return 0;
}

上面垃圾代码。可使用block重构

//
//  main.m
//  03-Block的使用场景


#import <Foundation/Foundation.h>

typedef void (^WorkBlock)();

void goToWork(WorkBlock workBlock)
{
    NSLog(@"起床");
    NSLog(@"刷牙");
    NSLog(@"穿衣服穿鞋");
    
    NSLog(@"出门");
    NSLog(@"搭公交");
    
    NSLog(@"抵达公司");
    
    // 实事
    // 调用block之前一定要做判断
    if (workBlock != nil) {
        workBlock();
    }
    // 实事
    
    NSLog(@"叮咚叮咚 下班了");
    NSLog(@"搭公交");
    NSLog(@"回家");
    NSLog(@"睡觉");
}

/**
 模拟星期一上班的具体情况
 */
void goToWorkInDay1()
{
    goToWork(^{
        NSLog(@"了解项目的需求");
    });
}

void goToWorkInDay2()
{
    // 实事
    goToWork(^{
        NSLog(@"熟悉公司以前的代码");
    });
    // 实事
}

void goToWorkInDay3()
{
    // 实事
    goToWork(^{
        NSLog(@"开始编写代码");
    });
    // 实事
}

void test(int (^myblock)(int num1, double num2, char num3))
{
    
}

int main(int argc, const char * argv[])
{
    @autoreleasepool {
////        goToWorkInDay3();
//        test(^int(int num1, double num2, char num3) {
//            
//        });
        
//        WorkBlock block = ^{
//            NSLog(@"-------------------");
//        };
//        
//        goToWork(block);
    }
    return 0;
}


飞书文档API深度使用指南:如何用n8n社区节点绕过HTTP Request的复杂配置 本文详细解析了如何利用n8n社区节点简化飞书文档API的集成过程,绕过复杂的HTTP Request配置。通过n8n-feishu-lite社区节点,开发者可以轻松实现飞书文档的创建、编辑和查询操作,大幅提升自动化工作流的效率。文章还提供了高级应用场景和性能优化建议,帮助开发者更好地利用飞书开放平台的API功能。 阅读详情

相关推荐

手把手教你用scRNA-seq和scTCR-seq分析CD8⁺ T细胞在免疫治疗中的动态变化

本文详细介绍了如何整合单细胞RNA测序(scRNA-seq)与单细胞TCR测序(scTCR-seq)技术,深入解析CD8⁺ T细胞在癌症免疫治疗中的动态变化。通过从数据预处理、细胞亚群鉴定到TCR克隆追踪的完整分析流程,揭示了T细胞的功能状态转变与克隆演化规律,为理解免疫应答机制和开发精准治疗策略提供了关键方法学指导。

p8q9r0的博客 567

block的使用场景

block的使用 一: Xcode中敲 inline就会出现 block定义模板 提示代码; block的格式: returnType (^blockName) (parameterTypes) = ^(parameters){ //代码 } block的类型: returnType (^blockName) (parameterTypes) 二: block的作用

sfjsxhb的博客 521

Shader Graph入门

Shader Graph 简介

zaizai1007的博客 1万+

Vue3 编译时优化:静态提升与补丁标记对运行时性能的真实影响分析

Vue3 的编译时优化主要改善的是 Update 阶段的性能(通过 Block Tree 跳过静态节点 + PatchFlags 跳过无关属性),对首次 Mount 的帮助有限。优化在以下条件生效:模板使用<template>语法(非手动 render)、节点类型可静态分析(非)、结构简单(条件分支少)。实用的性能检查列表:在 Chrome Performance 面板中,如果patch函数的耗时占总渲染时间的 70% 以上,说明编译优化在生效——Diff 是主要瓶颈。如果。

qq_34803115的博客 3951

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8904

PCA9548实战:从硬件连接到Linux驱动的I2C扩展全解析

本文详细解析了PCA9548 I2C多路复用器从硬件连接到Linux驱动配置的全过程。涵盖硬件引脚连接、电源去耦、地址选择等关键设计要点,以及Linux驱动加载、设备树配置和应用层编程技巧,帮助开发者高效实现I2C总线扩展。

weixin_28726391的博客 410

iOS之Block基本使用

来个大活,今天来写下Block 老方法,我们用WWW(what\why\how)进行学习block。 block是什么? block其实是一段代码块,其作用是保存一段代码块,在调用的时候block的时候,才调用里面的代码。 在程序里面输入inlineBlock,就可以得到block的声明与定义形式: /** 等号前面是block的声明; 等号后面是block的定义; returnType:b...

IOSSHAN的博客 664

Unity UI Toolkit避坑指南:从官方Samples到实际项目,这些‘坑’我帮你踩过了

本文分享了Unity UI Toolkit在实际项目中的避坑经验和优化技巧,包括动画系统的高效替代方案、3D世界UI的创新实现方式、USS样式继承的反直觉规则等。通过详细的代码示例和性能优化策略,帮助开发者避免常见陷阱,提升开发效率。

weixin_29535577的博客 343

黑马程序员---OC学习笔记之block的使用场景

------Java培训、Android培训、iOS培训、.Net培训-------- 一、block的使用场景:作为函数参数 【场景】 加入一个程序员每天生活是一个固定的流程 【day01】 起床---》刷牙--》去车站--》坐车---》到公司--》【分析项目】--》去车站---》坐车--》回家--》吃饭---》睡觉 【day02】 起床---》刷牙--》去车站--》坐车---

chunhuayun的专栏 548

【数据库】银行/信贷业务测试工作中涉及的数据库表格

银行/信贷业务测试工作中涉及的数据库表格,金融信贷测试人必看!

孤之鹜的博客 1172

【基础-单选】Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐:

Row组件中有两个Text组件,如果使用justifyContent对齐方式,下面哪个属性可以实现左右两端对齐

江拥羡橙的博客 1304

block使用场景和注意事项

1.使用场景:一般在一个函数的前面和后面都是重复性的东西,只有中间变化,一般使用block 2.注意事项 01:可以访问外面的变量(作用域问题) 02.里外变量同名的时候,访问里面那个(就近原则) 03.可以访问外面的变量,但是不能改外面的值,因为不是同一个地址(只是copy了一份,值传递) 04.想要改变外面变量的值,需要 变量前 加上 _block (地址传递) ...

weixin_30952103的博客 172

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 89

iOS __weak __block __strong区别和使用场景

废话少说,先看demo: 以下是一个非常简单的Person类 @interface Person : NSObject @property (nonatomic, copy) void(^personBlock)(void); @end @implementation Person - (void)doPersonBlock { self.personBlock(); } @end 以下是一个非常简单的测试demo @interface Test : NSObject - (void)do

weixin_53925648的博客 311

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Block运行时的类型以及Block是对象的验证

Block运行时的类型 在用Clang命令,将block相关源代码转换为C++源码代码后。 可以看到函数内的原始Block的isa 都是_NSConcreteStackBlock,但是其实际的类型会在运行时,根据实际情况变更和转换。 这里用源码测试Block在实际运行场景下的类型。 这里先针对函数内的block类型做一下总结: 1.如果block内部没有截获任何变量,则该Block就是全局类型...

哈雷的博客 847

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Block笔记(4)—— Block的类型

前面的章节里面,我们了解到Block也是一个OC对象,因为它的底层结构中也有isa指针。例如下面这个block: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //Block的定义 vo...

RUNNING-NIUER的博客 494

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Objective-C 之 block

前言 作为iOS开发,我们平日里会高频使用block,block非常重要,在学习Swift闭包时,我突然觉得可以将 Objective-C block 和 Swift闭包 一起对比学习。 如果你针对下面的问题已经有了比较深的理解,那么可以略过本篇文章: block 的数据结构 block 的内存机制 block 和 weakify/strongify 的关联 Swift闭包和 Objective-C block的区别 dispatch_block_t 的应用场景 一、block的数据结构 (一)bloc

编程新一的blog 611

网络回调:Block和Delegate的对比

1.Block会有执行无意义代码的可能,浪费CPU2.Block会有操作nil对象导致crash的可能,因此要写保护代码所以其实,使用delegate和Block的结合使用,由此我们可以看出1.Block适合做集约型调用,每个业务逻辑不一样,但是我们可以通过把代码封装在Block中,然后发给统一的方法来处理,实现了统一方法处理不同的逻辑2.delegate适合离散型调用,每次返回是同样的逻辑。

m0_59598029的博客 1003

ios block比较java_ios学习笔记block回调的应用(一个简单的例子)

一、什么是BlocksBlock是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block。二、在ios开发中,什么情况下使用BlockBlock除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可...

weixin_42577735的博客 171

iOS开发之Block(4)

(1)块总能修改实例变量 之前的文章中写了块可以截获当前环境中的局部变量,如果想要修改就要使用 __block 说明符。 但是针对类实例方法中的块,可以直接修改实例变量。 Worker.h #import @interface Worker : NSObject { NSString * _wId; } -(id)initWihtId:(NSString *)wId; -(v

faterman的专栏 664

「css基础」如何理解Display的属性:None,Block,Inline,Inline-Block

开篇本篇文章,笔者将介绍display的基本属性,主要涉及以下内容:display: none vs visibility: hiddendisplay: blockdi...

前端达人 812

Taro之View和Block

Block:用于仅在逻辑上分组,不产生额外的 DOM 元素,不支持样式。View:用于需要实际 DOM 元素以应用样式和布局的场景,支持所有常规样式。

shifff的博客 826

Block和Protocol

Block和Protocolblock的基本使用什么是block? Block是iOS中比较特殊的数据类型.Block是苹果官方特别推荐使用的数据类型,应用场景比较广泛.应用场景: - 动画 - 多线程 - 集合遍历 - 网络请求回调Block的作用: 用来保存一段代码,可以在恰当的时间再取出来调用. 功能与函数或者方法比较类似.函数与Block的区别: 函数不能在程序运行的过程中定

Donkey-Tao的专栏 681

分类 协议 延展 block

OC加强day03分类的简单使用 - 什么是分类 - 当一个类包含了非诚多的术语不同范畴的方法的时候 我们通常将这个类分为多个文件来实现,其中一个类叫主类/本类其余的叫分类 - 有了分类之后 一个类 = 所有分类 + 本类 - 如何添加分类 - newFile–> 选中OC File–>选择category—>填写分类名,本类名 - 分类的声明 @interf

李李李李李典 832

OC Block与协议

OC Block与协议 -->!!关于Block调用外部变量的理解: __block关键字作用:不使用__block修饰时,block内部使用某个外部变量是复制一份到堆区中,故不能修改block外部变量;当使用__block修饰时,会使某个基本数据类型在进入block前在栈区,进入block后就在堆区,出block也在堆区;而对于对...

weixin_30624825的博客 124

LoadRunner之Block

如何在一个脚本中实现不同事务不同次数的循环呢?     案例:假如你想在一个脚本中,实现登录执行1次,查询执行2次,插入执行3次,怎么办?录3个脚本?每个事务分别在脚本中复制N次?     当然不用,LR早就想到了你的需求,下面让我们隆重推出Block.位置:。     Run-time Settings——General——Run Logic.操作:     1.将你所要考察的事

hualusiyu的专栏 738
上一篇: 02-Block和typedef
下一篇: 04-Block的使用注意
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值