iOS中 Block体的使用

Block语法详解
本文详细介绍了Block语法的概念、形式及应用场景,包括如何定义Block、Block能够访问和修改的变量类型,并给出了具体的使用实例。

1:什么是 block 体,具体是什么形式,以及在什么时候使用?

   a)  Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,从ios4.0开始就很好的支持Block。 

   b)其形式如下:


再次声明:block可以访问和block定义在同一个词法范围里的变量。 

<span style="background-color: rgb(255, 255, 255);"><span class="kwd">{int</span><span class="pln"> multiplier </span><span class="pun">=</span><span class="pln"> </span><span class="lit">7</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> </span><span class="pun">(^</span><span class="pln">myBlock</span><span class="pun">)(</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">^(</span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> num </span><span class="pun">*</span><span class="pln"> multipiler</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></span>
<span style="background-color: rgb(255, 255, 255);"><span class="pln">printf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,</span><span class="pln"> myBlock</span><span class="pun">(</span><span class="lit">3</span><span class="pun">));</span><span class="pln"> </span><span class="com">// prints "21"</span></span>
}  

变量multiplier与定义的 myBlock在同一个词法范围内,因此可以访问,但不能修改。(block体只能修改全局变量,静态全局变量,静态局部变量,__block修饰的局部变量)

c) Block除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围(比如栈展开,出了作用域),仍可以继续共享或者修改这些状态。通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。 


2:block 的使用

a:block不能修饰全局变量,只能修饰局部变量  __block是只针对局部变量生效的一种描述变量存储类型的关键字,因此__block类型的变量都是栈量; 

b:修饰局部变量


c:修饰实例变量

3:使用实例

a:局部变量在 black 体内不能被修改,但可以被访问



可见全局变量i,静态全局变量 j,实例变量 k,__block 修饰的局部变量 l,静态局部变量 m均已经被修改,而局部变量n也能被正常访问。

另两篇相关的文字链接  

http://blog.youkuaiyun.com/menxu_work/article/details/8762848

http://www.cnbluebox.com/?p=255

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值