学习
实践
活动
专区
工具
TVP
写文章

使用Block提高代码可读性

最近大面积写业务代码,当碰到两个类之间传值问题,我习惯性解决方案是使用delegate,我觉得delegate本身当命名得当并且功能单一时,可阅读性会比较好。 但是在最近封装代码时候,我发觉delegate对于我自己定义并编写代码来说,可读性和使用性很好,但是当他人来使用我封装代码时候,也许Block更容易被理解一点。 在日常coding里绝大时间里开发者会是各种block使用者,但是当你需要构建一些比较基础,提供给别人用时候,使用block会给别人使用带来很多便利。 当然如果你已经厌烦了一直使用delegate模式来编程的话,偶尔转转写一些block,不仅可以锻炼思维,也能让你写代码看起来高端洋气一些,而且因为代码跳转变少,所以可读性也会增加。 block声明与定义 再来看看这个方法内部,是如何使用block,因为是示例,所以我很粗略去判断了奇偶数,并没有考虑特殊情况,见谅,只是个栗子。

29630
  • 广告
    关闭

    新年·上云精选

    热卖云产品年终特惠,2核2G轻量应用服务器7.33元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Block 小结block  储存位置block  循环引用

    block 实质值是一个结构体指针 当我们在block内部调用一个局部变量  当改变这个局部变量值是没有办法影响到 block内部  因为block底层实现是传入block一个常量值. static     __block 修饰  当我们调用一一个静态变量 全局变量  我们在block 调用之前修改之变量值 会影响到block这些常量值  因为 block 底层是传入了这个值 指针地址 __NSMallocBlock__  堆区 当前栈区block 经过copy  后 block就会存储在堆区 这个copy :作用 将栈区block 拷贝到堆区 (开发人员管理 内存) block 当我们把block拷贝到堆区时候 block 会对内部 调用对象 引用计数加1 因此会引发内存问题 解决方法 第一种方法 Block_release() 发放对该block 进行释放  在block 我们block 中调用self.age 此时 我们block在栈区 当我们block 调用属性copy block  在堆区 我们在mian.m person  引用计数为2 release 后

    47330

    浅析inline-block--使用inline-block创建布局

    行内块元素(inline-block elements)在内部他表现类似block元素,比如他拥有block元素width height,即可以设定自己高宽值,亦可以设定自己padding,border 而包裹性作用很多,其中一个是可以使用其来清除元素浮动。    浮动是唯一解决方案吗?   浮动通常表现正常,但有时候搞起来会很纠结。特别是处理内部容器中浮动,比如对一排图片使用浮动后对齐出现问题。So,inline-block是我们另一种选择。 使用这种属性可以模拟部分浮动特征,而不需要处理一些浮动带来问题。   这里极力推荐一篇张鑫旭文章:拜拜了浮动布局-基于display:inline-block列表布局。 文章讲解非常透彻,也将使用inline-block需要解决兼容问题给出了十分详尽可靠解决方案。

    55770

    block,inline,inline-block区别

    但width、height属性对他们仍有效; 注意:IE(低版本IE,IE8及以上支持)本来是不支持inline-block,所以在IE中对内联元素使用display:inline-block,理论上 IE是不识别 ,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性表象。 方法1:先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(两个display 要先后放在两个css声明中才有效果,这是ie一个经典 代码如下: div{ display:inline-block;} div{ display:inline;} 方法2:直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素 代码如下: div{ display:inline-block; zoom:1; } 常见块级元素:div、p、form、h1-h6、pre、ol、ul、dl等等; 常见内联元素:span

    70180

    iOS_理解Block代码块)+底层实现

    实现代码很多,不过不要方,我们需要看代码就几行,在最下面: ​ 如上图一共5个部分,分别是:block信息、block结构体、block实现、block描述、main函数。 继续使用terminal转换为底层实现代码如下: ​ 我们现在只看跟上一个(不捕获变量时)区别:首先block结构体变了,多了需要捕获变量,其初始化方法也多个一个参数,用来传入需要捕获值。 ​ ) = ^{ NSLog(@"%@", obj); } aBlock(); ​ 继续使用terminal转换为底层实现代码如下: 其结构图如下: ​ 可以看到当使用了alloc对象时,跟之前对比 @", name); } aBlock(); ​ 继续使用terminal转换为底层实现代码如下: 结构如下图: ​ 跟上一个捕获alloc变量对比,捕获静态变量使用是 指向指针指针,所以可以直接使用或修改静态变量值 如下代码,a在block代码之前地址、在block内部地址、在block代码之后地址,都一样么?

    10920

    display:inline、block、inline-block区别

    (准确地说,应用此特性元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素属性)   并不是所有浏览器都支持此属性,目前支持浏览器有:Opera、Safari在IE中对内联元素使用 display:inline-block,IE是不识别的,但使用display:inline-block在IE下会触发layout,从而使内联元素拥有了display:inline-block属性表症 有两种方法:   1、先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(两个display要先后放在两个CSS声明中才有效果 代码如下(...为省略其他属性内容):   div {display:inline-block;...}     代码如下:   div {display:inline; zoom:1;...}   以下用个例子来说明三者区别和用 <!

    31610

    Updater application block 2.1使用和扩展

    Updater application block 2.1使用和扩展 概述 Updater application block简称UAB,是Microsoft patterns & practices UAB使用了"推模式"自动更新,在无需用户干预下发布新版本更新; 应用场景 保持应用程序总是最新版本 用户可以使用多个插件 保持数据文件总是最新版本 为应用程序添加自我更新功能 使应用平滑升级到 ; .net下操作winzip,Gzip文件使用开源ICSharpCode.SharpZipLib.dll 版本为8.5可以很方便解压/压缩文件,文件目录 源代码分析 UAB自身已经提供了很多 扩展UnZipProcessor编辑UI 解压zip文件,解压路径两个参数 ? 创建扩展参数类UnZipProcessItem ? 代码如下 ? 代码如下 ? 注册新开发组件 ? ? 测试 OK

    41430

    iOS Block本质(一)

    ; }; block(10, 10); } return 0; } 3.查看其内部结构 使用命令行将代码转化为c++与OC代码进行比较 xcrun - _0函数中首先取出block中age值,紧接着可以看到四个熟悉NSLog,可以发现这段代码恰恰是我们在block块中写下代码。 因为在block块中使用到age局部变量,所以在block声明时候这里才会将age作为参数传入,也就说block会捕获age,如果没有在block使用age,这里将只会传入(void *)__main_block_func 因为block在定义之后已经将age值传入存储在__main_block_imp_0结构体中并在调用时候将age从block中取出来使用,因此在block定义之后对局部变量进行改变是无法被block block代码块中代码被封装成__main_block_func_0函数,FuncPtr则存储着__main_block_func_0函数地址。

    40850

    【封装富文本API,采用block实现链式编程】(block 妙用:结合block和方法优点实现iOS链式编程)

    文章目录 前言 核心思想 具体实现步骤 I 、使用方法 II、实现细节 2.1 使用宏进行block属性声明 2.2 代码 see also 前言 block 妙用:结合block和方法优点实现 核心思想 实现步骤:方法返回值是block,block必须有返回值(本身对象),block参数(需要操作值) 链式编程特点:将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好 ; x.attributedText =xx; II、实现细节 2.1 使用宏进行block属性声明 #define k_PropertyStatement ,block参数(需要操作值) //链式编程特点:将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好a(1).b(2).c(3)。 方法返回值是block,block必须有返回值(本身对象),block参数(需要操作值) //富文本block属性,发返回值就是自己,block参数类型propertyPointerType

    22520

    iOS Block本质(四)

    通过之前对源码分析可以知道。 age是在main函数内部声明,说明age内存存在于main函数栈空间内部,但是block内部代码在__main_block_func_0函数内部。 通过下面代码深入观察一下。 }; block(); } return 0; } 将上述代码转化为c++代码查看不同变量之间区别 struct __main_block_impl_0 { struct _0结构体中看出,没有使用__block修饰变量(object 和 weakObj)则根据他们本身被block捕获指针类型对他们进行强引用或弱引用,而一旦使用__block修饰变量,__main_block_impl 上面提到过__block修饰age变量在编译时会被封装为结构体,那么当在外部使用age变量时候,使用是__Block_byref_age_0结构体呢?

    35330

    4.Block类型

    = ^{ printf("%d\n",i); }; block(); return 0; } 这种是 栈块 总结如下: 记述全局变量地方创建Block,这种是全局 不截获自动变量时候将会被编译器编译为 进行了copy操作(实质上是调用_Block_copy函数),会让块从栈复制到堆上. 调用Blockcopy实例方法,会把栈上block复制到堆上. 将Block赋值给附有__strong修饰符id类型类或Block类型成员变量时是在堆上 Block作为函数返回值时是在堆上 Blockcopy,retain,release操作 对block retain 与release等效 NSStackBlock:retain、release操作无效,必须注意是,NSStackBlock在函数返回后,Block内存将被回收。 copy之后不会生成新对象,只是增加了一次引用,类似retain 尽量不要对Block使用retain操作

    26750

    Block RAM基本结构

    从而,从输出到输出最大Latency为2。采用手工编写RTL代码方式使其映射为Block RAM时,可按照Block RAM架构描述。 可通过IP Core (Block Memory Generator)或者XPM_MEMORY方式使用BlockRAM,但无论通过哪种方式,都需要注意对Block RAM输出要做寄存处理,尤其是在高速设计中 在使用IP Core时,会有如下图所示选项,其中Primitives Output Register为Block RAM自带寄存器,而CoreOutput Register为SLICE中寄存器。 Block RAM自带寄存器(Embedded Registers)对系统性能有很大影响,以VirtexUltraScale Plus芯片为例,在使用该寄存器和未使用该寄存器时,Tco(时钟到输出延迟 结论: -在使用Block RAM时,为便于时序收敛,最好使用Embedded Registers 上期内容: 查找表用作分布式RAM 下期内容: Block RAM性能与功耗

    1.9K41

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 腾讯云微搭低代码

      腾讯云微搭低代码

      腾讯云微搭低代码 WeDa 是高效、高性能的拖拽式低代码开发平台,向上连接前端的行业业务,向下连接云计算的海量能力,助力企业垂直上云。微搭将繁琐的底层架构和基础设施抽象化为图形界面,通过行业化模板、拖放式组件和可视化配置快速构建小程序、H5应用、Web应用等多端应用,免去了代码编写工作,让您能够完全专注于业务场景。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券