最近面试碰到一个block的问题:写个函数,返回输出int传参的block.之前正好看了ASI怎么宏定义block,就写上了:
typedef PrintBlock (^ void)(int num) - (PrintBlock)getBlock:(int)num { return ^(int num){ NSLog(@"%d",num); }; }
思路体现出来了,不过各种细节错误,囧...
其实就考两点,block定义和内存管理.
1.定义,看文档吧:
A block variable looks like a function pointer, except with a caret (‘^’) instead of an asterisk (‘*’). void (^my_block)(void);
前面加个typedef就成了类型声明,如ASI的:
typedef void (^ASIXXXBlock)(void)
PS:昨天看文档的runtime guide,才晓得fuction pointer是咋声明的,果然*跟^渊源很深
2.内存管理,关键在于block是栈分配的变量,当前作用域结束它就会释放.文档在此:
Memory Management Internally, a block object is implemented as a function pointer plus context data and optional support routines. It is allocated directly on the stack for efficiency, which means that you need to copy a block to the heap (and release it when you are done) if you want it to persist outside its initial scope.
再看头文件对dispatch_block_t的定义,会有更直观的印象,因为注释里还举例了^^
至此OK,得到:
typedef void (^PrintBlock)(int num); @interface ClassA : NSObject { } + (PrintBlock)createBlock; @end @implementation ClassA + (PrintBlock)createBlock { PrintBlock block = ^(int num){ NSLog(@"%d",num); }; return [block copy]; } @end
相关推荐
比较small block NANDFLASH and large block NANDFLASH
pin block计算工具
blocklist for browser
有关block的详细讲解、包括block定义、block结构、block访问变量、block内存管理
3:如果启动指定block,等指定block完成再启动下一个block 选别动作等连续运转等情况下 6.以电机每旋转一圈的指令脉冲为基准设定移动量 1.blockNo.0 相对定位 动作内容:进行定点动作。 例:10000脉冲的增量式...
block基础知识及block应用。 本例介绍了使用block实现界面传值,自定义带有block代码块的方法。
从TextBlock拖拽到TextBlock
银行卡交易中,ANSI x9.8计算PinBlock的说明
delphi BlockRead用法的源码,blockread 函数可以读一个或多个记录到变量中
介绍block的作用和实现的代码 描述block在iphone上面是如何使用的
block的回调测试代码,主要是block回调的时候传参问题
从2.6.15的内核开始,顶层目录下面有了一个叫做block的目录,内核目录结构变成了现在这个样子: localhost-1:/usr/src/linux-2.6.22.1 # ls COPYING Documentation MAINTAINERS README arch crypto fs init kernel mm...
S7 Block Privacy程序块加密工具使用方法.pdf
SAP ERP系统财务界面客制化字段
block box verilo code
iOS的block是学习的难点和重点,熟练使用block可以达到代码的简单高效,特别是在网络的使用过程中。Block demo是一个简单易学的,可以便于学习原理。
基于psim的SVPWM仿真,利用C-BLOCK模块搭建。
block k-svd文章源代码
swift UITableView 闭包 block! 使用代码创建UITableView 自定义Cell 使用闭包(block) 回调
一个TextBox伪装的可以复制的TextBlock,可以复制其中的文字