iOS __block

Vue 10分钟入门VR全景显示 基于photo-sphere-viewer 文章目录前言一、引入photo-sphere-viewer?二、使用步骤1.引入库2.声明容器3.内容加载4.全部代码总结 前言 由于工作的需求,要实现全景图片的展示与预览,本来以为会是一个很难的内容,没想到使用现成的组件photo-sphere-viewer就可以轻松实现,上手只需要10分钟! 一、引入photo-sphere-viewer? 可以直接通过npm进行引入 npm install photo-sphere-viewer 二、使用步骤 1.引入库 photo-sphere-viewer 阅读详情

iOS4已经直接支持blocks,很有必要学习一下。

在ios,blocks是对象,它封装了一段代码,这段代码可以在任何时候执行。Blocks可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。它和传统的函数指针很类似,但是有区别:blocks是inline的,并且它对局部变量是只读的。

Blocks的定义:

       

[cpp]  view plain copy
  1. int (^myBlock) (int a,int b) = ^(int a,int b){  
  2.        return a+b;  
  3.    };  


定义了一个名为myBlock的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现,是不是有点像方法的定义?

Blocks可以访问局部变量,但是不能修改。比如下面的代码就会报编译错 

[cpp]  view plain copy
  1. int num = 0;  
  2.     //使用block  
  3.     int (^myBlock) (int a,int b) = ^(int a,int b){  
  4.         num = a+b;  
  5.         return num;  
  6.     };  

如果要修改就要加关键字:__block (注意,是两个下划线"_")

[cpp]  view plain copy
  1. __block int num = 0;  
  2.     //使用block  
  3.     int (^myBlock) (int a,int b) = ^(int a,int b){  
  4.         num = a+b;  
  5.         return num;  
  6.     };  
 

作为函数的参数,blocks某种意义上替代了回调函数或者delegate。当函数调用了,假设某个事件触发,这时blocks里的内容就会运行。这样有利于代码的整合和阅读,你不需要到处去实现委托方法了。

系统API中已经有很多支持blocks参数了

·       Completion handlers

·       Notification handlers

·       Error handlers

·       Enumeration

·       View animation and transitions

·       Sorting

例如:

[UIView animateWithDuration:(NSTimeInterval)duration animations:(void (^)())animations]

集合体中也可以运用blocks。枚举一个数组时我们通常:

         for (id obj in Array);

现在,

NSString *area = @"Europe";

    NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

    NSMutableArray *areaArray = [NSMutableArray arrayWithCapacity:1];

    NSIndexSet *areaIndexes = [timeZoneNames indexesOfObjectsWithOptions:NSEnumerationConcurrent

                                                             passingTest:^(id obj, NSUInteger idx, BOOL *stop) {

                                                                 NSString  *tmpStr = (NSString *)obj;

                                                                 return [tmpStr hasPrefix:area];

                                                             }];

   

    NSArray *tmpArray = [timeZoneNames objectsAtIndexes:areaIndexes];

    [tmpArray enumerateObjectsWithOptions:NSEnumerationConcurrent|NSEnumerationReverse

                               usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

                                   [areaArray addObject:[obj substringFromIndex:[area length]+1]];

                               }];

    NSLog(@"Cities in %@ time zone:%@", area, areaArray);

在blocks中obj就是数组中的每个成员,我们就可以在blocks内对每个对象进行处理。再比如:

NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"a",@"b",@"abc",nil];

    NSMutableArray *mArrayCount = [NSMutableArray arrayWithCapacity:1];

    [mArray enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock: ^(id obj,NSUInteger idx, BOOL *stop){

        [mArrayCount addObject:[NSNumber numberWithInt:[obj length]]];

    }];

   

    NSLog(@"%@",mArrayCount);

你会发现,这样写代码更容易读懂。

最后,看一个排序的例子:

    NSArray *stringsArray = [NSArray arrayWithObjects:

                             @"string 1",

                             @"String 21",

                             @"string 12",

                             @"String 11",

                             @"String 02", nil];

    static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |

    NSWidthInsensitiveSearch | NSForcedOrderingSearch;

    NSLocale *currentLocale = [NSLocale currentLocale];

    NSComparator finderSort = ^(id string1, id string2) {

        NSRange string1Range = NSMakeRange(0, [string1 length]);

        return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];

    };

    NSLog(@"finderSort: %@", [stringsArray sortedArrayUsingComparator:finderSort]);

结果:finderSort: (

    "string 1",

    "String 02",

    "String 11",

    "string 12",

    "String 21"

)

2026年美赛数学建模竞赛 MCM B题:使用太空电梯系统建立月球殖民地 问题一 月球殖民地材料运输的三种场景建模 详细解题思路和代码 如果运输系统不能完美工作(例如,系绳摆动、火箭失败、电梯故障等),你的解决方案在多大程度上会发生变化?技术可行性:三种方案在技术上都是可行的,但挑战不同 经济性:混合方案在长期视角下最具成本效益 时间效率:并行运输可以显著缩短总建设时间环境影响:太空电梯的环境优势明显,混合方案可平衡需求风险分散:混合方案提供了天然的风险分散机制 阅读详情

相关推荐

电网渗透之终端安全

        电力系统安全不仅关系到电网的稳定运行,也关系到国家能源安全和国计民生,甚至关系到国家的安全和利益,电力系统由于结构复杂多样、分布广泛、重要性高,一旦系统瘫痪影响巨大,因此,极容易成为敌对势力攻击的首选目标。随着信息安全暴露面迅速增加,将给公司网络安全防线带来严峻挑战。       监控、保障这些电力系统安全运行变的尤为重要。内部安全防护产品有防火墙、纵向加密、反向隔离设备等...

guapi007008的博客 2722

iOS高级理论: Block介绍和使用

在 iOS 开发中,Block 是一种闭包(Closure)的概念,可以将一段代码块作为一个对象进行传递和存储,类似于函数指针。Block 可以捕获其定义时所在范围内的变量,并在需要的时候执行这段代码块。Block 的使用可以方便地实现回调、异步操作、事件处理等功能。

长沙火山 4264

别再手动算频谱了!用这个在线FFT工具,5分钟搞定JSON/CSV数据分析

本文介绍了一款高效的在线FFT工具,帮助用户快速分析JSON/CSV格式的时域数据,5分钟内完成频谱分析。通过傅里叶变换(FFT)算法,大幅提升计算效率,解决传统手动计算的痛点,适用于工业振动分析、设备故障诊断等场景。

weixin_29172201的博客 258

iOS中Block完全详解

欢迎大家关注我的个人博客:https://darkknightkazuma.github.io #一、Block基础介绍 ##1、概念介绍 Block又称为块或块对象,它是苹果在OSX10.6和iOS4.0中新加入的功能,是C语言层面的特性及功能实现,类似其它语言的闭包(closure)功能.当时苹果正使用LLVM的clang作为C语言的编译器来改进C/OC/C++/OC++等的编译处理,Blo...

theShifter的博客 2658

联想Y9000P安装Ubuntu20.04记录

联想Y9000P 2022安装Ubuntu20.04问题记录

Legendyyy的博客 7116

CAN信号定义避坑指南:Kvaser Database Editor里Byteorder和Bitpos设置的那些‘坑’

本文详细解析了在Kvaser Database Editor中配置CAN信号时,字节序(Byteorder)和起始位(Bitpos)设置的常见错误及解决方案。通过实际案例和验证技巧,帮助工程师避免DBC文件配置中的陷阱,确保车载电子系统的稳定通信。

weixin_28678831的博客 360

iOS Block 详解(Object-C)

iOS Block 详解(Object-C)

wyz670083956的博客 1218

DeepSeek-OCR 本地部署使用教程(附完整环境配置与推理示例)

DeepSeek-OCR是由DeepSeek AI推出的开源OCR模型,支持高精度文档识别与结构化输出(如Markdown转换)。本文提供了详细的本地部署指南,包括系统要求(推荐Linux+A100 GPU)、环境配置(Python 3.12.9+PyTorch 2.6.0+CUDA 11.8)、模型下载及两种推理方式:高性能的vLLM(适合批量处理)和灵活的Transformers(适合调试)。支持多种分辨率模式和提示词模板,适用于合同识别、PDF转换等场景。常见问题包括显存优化和性能调优建议。

qq_58607032的博客 6723

iOS之Block分类和使用注意事项

Block有三种类型:的三种类型.并都继承于NSBlock 我们在讲的三种类型之前,先了解一下程序的内存分配情况,因为不同类型的分配的内存也不同.。在iOS中内存主要分为五大区域:栈区、堆区、静态区、常量区、代码段不同block类型的内存分配 结论: 没有访问 auto变量 的block 就是 __NSGlobalBlock...

wywinstonwy的专栏 2939

uniapp [安卓苹果App端] - 实现APP开发后台保活+息屏后台持续运行效果,强制后台保活手机黑屏后进程存活后台保持网络连接或持续定位等功能提供支持(app后台运行休眠仍然可以确保一直运行)

uniapp APP开发后台保活,Uniapp-APP后台保活插件(安卓苹果ios后台保活)保证应用在后台继续运行,uniapp实现app保活 保后台运行 避免系统主动杀进程,如何让安卓APP一直在后台运行?uniapp 安卓 APP 后台持续运行(保活)iOS App后台保活,Android 后台运行白名单实现保活,保活息屏后台运行,uniapp后台保活,uniapp熄屏 后台运行,Android/ios进程保活/息屏后后台保持定位、网络运行,uniapp在android ios保活,挂后台可运行,安卓A

🏆 前端领域优质创作者 1万+

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 560

【iOS底层探索- Block原理分析-循环引用】

Block循环引用

weixin_61639290的博客 1701

CLCD 中国生命周期基础数据库使用攻略

CLCD 是公共建筑碳排放计算的理想选择,其本地化数据可显著提高计算准确性。

hy行者勇哥的博客 2687

【iOS】Block总结

之前的Block写的没啥重点,这一次总结一下重点,比如Block如何捕获外界变量,__block的使用Block的重点其实就在于捕获自动变量与使用__block修饰时forwarding指针的变化,还有其发生拷贝的时机:使用__block变量,使用dispatch API, 手动copy与作为函数返回值另外重要的还有block的循环引用,后面会一起总结循环引用。

weixin_72437555的博客 1502

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【iOS】 Block再学习

笔者之前学习过block的相关内容,但是掌握不牢,今天再重新学习一遍。

qq_73106050的博客 1604

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS Block简介

概述 Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block也是一种数据类型,它可以定义变量、做参数、作为返回值, Block是代码块,它可以保存一段代码,并且在需要的时候再调用.在iOS开发中,Block常被用于GCD、动画、排序、传值等的各类回调. 1.定义一个Block typedef 返回值类型(^block名称)(参数列表); //例如: //无...

smile_sunshine 996

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS中的block block是什么,block的本质

iOS中的block block是什么,block的本质 block 是c语言的扩充功能,是带有自动变量(局部变量)的匿名函数,也称之为 闭包。 先说结论,block中包含了一个isa指针,所以它是一个对象,一个包含了函数调用和函数调用环境的OC对象(那么是swift对象吗?感兴趣的,可以自己动手研究下)。 1.转换代码,分析结构 以下是过程:①写个简单的block ② 使用命令clang -rewrite-objc hello.m 转为c++ 互相对比可以看出,我们对block的...

iOS圈圈的博客 743

iOS block简介

Block 是iOS 4 才引入的C语言扩充功能。 block是什么? block 就是带有自动变量(就是局部变量)值的匿名函数。顾名思义就是带有自动变量(也就是局部变量)值的不带名称的函数。 自动变量值是啥意思呢? 先回顾下C语言中的函数里可能使用的变量类型: 自动变量(局部变量) 函数的参数 静态变量(静态局部变量) 静态全局变量 全局变量 其中,在函数的多次调用之间能够传递值的变量有: ...

哈雷的博客 2282

iOS 什么是Block

文章目录1.什么是Block1.1 源码分析2.1 MCBlock.cpp1.2 总结2.什么是Block调用2.1 Block调用的本质:源码解析 1.什么是Block Block是将函数及其执行上下文封装起来的对象。 1.1 源码分析 通过clang的一个编译器命令来查看编译之后的文件内容 clang -rewrite-objc file.m 2.1 MCBlock.cpp I_MCBlock_method: I(当前类的实例方法),MCBlock(类名) 1.2 总结 Blo

baidu_40537062的博客 734

【iOS】iOS Block基本用法记录

做了大半年IOS,每次想写block的时候都发现不记得格式,总要翻一翻老代码然后copy一份,然而并不能记住,恶性循环影响工作效率。 参考:https://www.jianshu.com/p/e82bc3acc2c9记录一下block的基本用法,目标是流利的写出一个个block。 原型声明和定义 NSString *(^myBlock)(int); 原型声明分三部分,格式可以总结为: ...

CROW的博客 1402

[iOS] Block 的使用

Blocks是带有局部变量的匿名函数(不带名称的函数)。Blocks 也被称作闭包代码块。展开来讲,Blocks 就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用。

2501_91494333的博客 1054

IOS block 教程

IOS block 教程 5人收藏此文章, 我要收藏发表于7个月前(2013-02-04 18:11) , 已有343次阅读 ,共0个评论 本章学习目标: 1. 了解何谓block。  2. 了解block的使用方法。 注:变数=变量    Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容易

2286

ios block使用

iOS Block的使用 一 .最简单的block使用**  使用block的三个步骤:1.定义block变量 2.创建block代码块 3.调用block匿名函数   定义一个block的构成包括:返回值,block名,参数类型。   block代码块作为一个匿名函数是可以被写在其他方法中的,所以一般我们将block代码块写在其他方法里,调用该方法的时候block代码块将不会被执行,只有回

lqk的博客 428

ios block语法

ios中的block语法,给我的第一感觉就是属性传值、方法传值和协议传值的合体。他既可以当作属性和方法来使用,也可以像协议传值一样进行回调。感觉以后做项目不会block都没办法见人,这句话足以证明了block的地位。闲话少叙,下面我们来看block时怎么定义的: 返回类型^(block名)(参数类型) = ^(参数类型 参数名,…){ ………… return 返回值;

东东的博客 905

iOS block回调

在iOS4.0后推出的block语法。Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。 技术交流群:98787555  一、讲解block回调例子 1.首先有两个控制器:A控制器:BlockViewController.h  

Lz_MobileInternet的博客 944

IOS之Block详解

Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。block其实就是个必包函数,关于闭包,我觉得阮一峰的一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数,这个解释用到block来也很恰当:一个函数里定义了个block,这个block可以访问该函数的内部变量。 一个简单的Block示例如下: int (^maxBloc

liuzhiwei_051512的专栏 480
上一篇: cocos2d iPad游戏移植到iphone最简单的方式(缩小OpenGLView)
下一篇: 条件表达式 objective c可用
trandy
博客等级 码龄17年 79粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值