重要经验五:block作为属性的注意事项

block参数,属性,返回值 这是一个很简单的对block回调的一个总结,1.作为方法的参数,2.作为属性,3,作为返回值 立即下载

  现代ios应用的开发,不使用GCD和block,效率会降低很多,在今年3月份之前,我在block的学习和使用方面,精力和经验都明显不足,在SF有个牛逼同事,不仅自己积累了一套库,而且对这个库持续进行更新和维护,其架构能力和代码水平都不错,他的代码中使用了大量的GCD,为了适应这些技术,我在coding的过程中,开始有意识的多写GCD的代码,刚开始一切顺利,直到我使用block来作为一个对象的属性,这让我纠结了很久。

  我遇到的问题是:1,这种属性block,其他类在使用的时候,应该怎么写? 2,block的类型不为void、int,而是对象时,比如NSString*时,又应该怎么办?

  这两个很简单的问题,让我前后一起纠结了2个多小时。下面,我把我的测试代码上上来,希望对遇到同样问题的人,有所帮助。下面直接上代码了。

头文件如下,实现文件中不需要实现任何代码。

#import <Foundation/Foundation.h>

typedef int(^compareBlock)(int a, int b);

@interface HBTestBlock : NSObject

@property(nonatomic, copy) compareBlock compare;

@property(nonatomic, copy) UIView *(^viewGetter)(NSString *imageName); //注意其返回类型为UIView *

@end

下面这两个函数,展示的是如何在其他的类中,使用这两个属性。

#pragma mark 测试对象的属性为block

- (void)testObjPropertyBlock

{

    HBTestBlock *objPropertyBlockObj = [[HBTestBlock alloc] init];

    objPropertyBlockObj.viewGetter = ^(NSString *imageName){

//        return [[UIView alloc] init]; //特别注意此处,若对象不匹配,则会报错,设置为nil也会报错。

        return [self currentView];

    };

    objPropertyBlockObj.viewGetter(@"hello"); //实际执行block

}


- (UIView *)currentView

{

    NSLog(@"now I am in currentView");

    return nil;

}


- (void)testPropertyBlock

{

    HBTestBlock *properBlockObj = [[HBTestBlock alloc] init];

    properBlockObj.compare = ^(int a,int b)

    {

        int result = [self maxer:a another:b];

        NSLog(@"the result is %d",result);

        return result;

    };

    NSLog(@"the properBlockObj.compare is %d",properBlockObj.compare(100,200));

}


- (int)maxer:(int)a another:(int)b

{

    if (a > b) {

        return a;

    }

    return  b;

}





ios-block作为对象属性和返回值的展示方式.zip block,对象属性,返回值 立即下载

相关推荐

自定义LayoutManager实现android-pile-layout滑动卡片堆叠效果

这是我的第一篇博客,总算有个契机开始写博客了,就从自定义LayoutManager开始吧。 前段时间看到一个项目(android-pile-layout),效果特别不错,这是效果图: 效果确实不错,我看了下实现,是用的自定义的ViewGroup实现的,计算什么还搞的挺复杂的,具体的没细看。作者说也尝试过用LayoutManager实现,但是没找到合适的数学模型,好吧,看到数学模型我

u014296305的博客 1万+

iOS开发-block详解与使用

一:基本定义   /*初步上式block定义的一些理解和解释,接下来会详解:  *block名为myBlock,结合C的函数指针,myBlock为block体的指针,指向block体的入口地址  *int result = myBlock(5) ^(int num){return num*num}(5)//将5传给num  *回调时可以将myBlock作为参

在前行的路上 423

【纯血鸿蒙】安装hdc工具

参考资料:

oh.K 5555

谈谈Block作为属性、方法参数、方法的返回值的应用

在IOS开发中block常用于 作为对象的属性、作为方法的参数、作为方法的返回值。 首先需要了解一下block的标准书写格式:  returnType(^blockName)(parameterTypes) = ^returnType(parameters) {     statements   }; 下面我们结合代码对几种情况作介绍。 一、b

u014247354的博客 2289

5.1 Tessent Atpg系列 第八章 Test Pattern Generation - Verify Test Pattern

为什么要做基于timing的仿真,意义在于可以比较ATPG工具和simulator工具的差异性。因为时序的差异导致不同的结果。首先你需要通过write_patern 这句cmd来写出pattern,默认是parallel 模式,除非你用-serial 指定写出serial, 因为serial 文件非常大,所以你可以使用-sample 开关写出部分pattern即可,工具会根据每一种pattern 类型都会至少保存一只。 另外,你也可以使用-start -end 开关来减少文件大小,但是这样的截取,是不可靠的

ciscomonkey的博客 7763

ardupilot开发 --- MavLink 篇

ardupilot开发 --- MavLink 篇

记录老板的每次pua,分享领导每天的毒鸡汤... 4252

iOS block详解

文章目录概述Block的定义与使用实际开发中的定义block与外界变量截获自动变量(局部变量)值默认情况__block修饰的外部变量Block的copy操作Block的存储域及copy操作__block变量与__forwarding防止Block循环引用Block的使用示例Block作为变量(Xcode快捷键:inlineBlock)Block作为属性(Xcode快捷键:typedefBlock)...

煮酒Shae 673

Creo模型装配总结

creo7.0的零件装配操作方法,建立基准面、新建约束、约束顺序

heda3的博客 1万+

Block作为属性、方法参数、返回值

Block的强大相信可以从本文简介中隐隐约约体会出来,那么本文将从Block作为对象属性,作为方法参数,作为返回值类型三个方面对Block的使用来进行一个简单的使用与体验示例,熟悉并且回顾,然后深入浅出的从本文开始带大家进入函数响应编程。

Oboe_b的博客 2009

【Agent从入门到实践】01 从“工具函数”到“智能体”:Agent与传统程序的核心区别

传统程序是“你教它怎么做,它才做什么”,Agent是“你告诉它做什么,它自己想怎么做”。从技术层面来说,这个区别的背后,是Agent融合了大语言模型(LLM)、记忆能力、工具调用能力、决策能力等技术,才实现了“自主思考”和“灵活执行”,而这些技术,咱们会在后面的章节中一步步拆解,手把手教大家实现。

人工智能AI技术 989

华为OD机试 新系统真题 【最小代价完成论文评审】

华为OD机试 新系统真题【最小代价完成论文评审】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小代价完成论文评审】多语言题解。

qq_45776114的博客 443

block与property

栈区(stack):存放函数的参数值、局部变量的值等,由编译器自动分配释放,通常在函数执行结束后就释放了,其操作方式类似数据结构中的栈。栈内存分配运算内置于处理器的指令集,效率很高,但是分配的内存容量有限,比如iOS中栈区的大小是2M。 堆区(heap):就是通过new、malloc、realloc分配的内存块,它们的释放编译器不去管,由我们的应用程序去释放。如果应用程序没有释放掉,操作系统会自

巅峰寂寞. 528

docker-compose Install OrangeHRM

OrangeHRM是一个全面的人力资源管理HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。

极致,细节 1004

iOS block原理以及注意事项

iOS block原理

极客洪成的博客 1315

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iOS中Block的使用注意事项

//定义一个Block typedef returnType(^BlockName)(parameterA,parameterB,...) e.g:typedef void(^RequestResult)(BOOL Result) //实例 ^{ NSLog(@"This is a Block"); } Block本质是一个OC对象,内部含有一个isa指针,

wuchenjian186的专栏 5230

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

block 和 属性

27.block  注意实现形式 基本语法: 本质上是匿名函数,与函数真真十分相似  称之为函数的实现部分,返回值省略不写   变量block的类型 int (^)(int x, int y) 变量名字:block 可以为任意符合变量命名规范的名 =右边的block用来存储函数 初始值是一个函数的实现部分         int (^block)(int x ,int y

光远的iOS开发专题 845

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

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

css中新型的边框设置属性border-block

这个属性是简写属性,可以同时设置 border-block-width、border-block-style 和 border-block-color。其中,border-block-start 用于设置元素的开始边界样式,而 border-block-end 用于设置元素的结束边界样式。在 CSS Grid 或 Flexbox 布局中,它尤其有用,因为它可以让你同时控制元素的顶部和底部边框,或者左侧和右侧边框,而无需分别指定。但在实际应用中需关注浏览器兼容性,并合理结合传统边框属性进行样式设定。

qwguo 1535

Block注意事项

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

Sunny博客 339

Vivado使用(5)——使用块综合策略(Block Synthesis)

块级综合流程(BLOCK_SYNTH)使用了一种属性,让你可以在全设计的顶层之外的特定层次结构级别上使用某些全局设置和策略,这与自顶向下流程不同。这样,你可以在不影响整个设计的情况下,针对特定的模块或子系统应用优化策略,以达到更好的综合结果。

apple_53311083的博客 2624

IOS block编程注意事项

block可以完全作为delegatge的替代品,而且使用简单,不需要写太多@protocol来定义接口。但使用有以下几点注意。 (1) block不是Object对象,所以对retain无效,要想保留block生命周期,最好通过copy来实现,当然copy后,要记得release。如果不想手动管理,就通过[[[testBlock] copy] autorelease]来管理。 (2)我们知道

sgl870927的专栏 8570

css中display属性

 一、css中display可以取的值   值 描述 none 此元素不会被显示。 block 此元素将显示为块级元素,此元素前后会带有换行符。 inline 默认。此元素会被显示为内联元素,元素前后没有换行符。 inline-block 行内块元素。(CSS2.1 新增的值) list-item 此元素会作为列表

whaxrl的专栏 1007

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

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

长沙火山 4264

block 注意事项

1,block 在实现时就会对它引用到的它所在方法中定义的栈变量进行一次只读拷贝,然后在 block 块内使用该只读拷贝。   如下代码:       NSMutableArray * outsideArray = [[NSMutableArray alloc] init];          void (^blockObject)(void) = ^(void){

yanqux的专栏 415

Block传值和传值之间的注意事项

Block传值一般用在从后往前传值. 步骤: 1.在第二个页面设置一个block属性, 2.在第二个页面的相应位置调用该block属性,调用函数 3.在第一个页面展开此block方法 注意:一般用typedef给block属性起个别名 主要代码:(将第二个页面的输入框中的内容传给第一个页面的输入框,显示出来) 第二个页面的.h文件中声明 #pragma mark----------

今夕莫离-IT 1770
上一篇: 重要经验四:实时检测UITextField之的变化
下一篇: loadView、viewDidLoad、initWithCoder、initWithNibName、awakeFromNib的用法
lvmaker
博客等级 码龄17年 118粉丝 56原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值