Block学习

之前一直都只知道用block,没有对block进行过总结和深入的理解。

个人觉得block就是一个介于变量和函数中间的指针变量(对象),这个变量有三个技能:

1.有返回值
2.有参数
3.有自己的实现方法
  • block的定义
局部变量:
returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...};
成员变量:
@property (nonatomic, copy) returnType (^blockName)(parameterTypes);
函数形参:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
函数实参:
[someObject someMethodThatTakesABlock:^returnType (parameters) {...}];

typedef:
typedef returnType (^TypeName)(parameterTypes);
TypeName blockName = ^returnType(parameters) {...};

总结block的定义:
其实跟函数一样:
-(void)funciton:(NSString *)str
-(返回值)函数名(参数)
void(^function)(NSString **)
返回值(block名称)(参数)
不同点:

  1. 只是作为函数形参的时候,blockname要放到最后,
    -(void)initValue:(float(^)(int))blockname
  2. ^这个符号,只有block写代码块的时候才会放在最前面,其他都是在中间
    NSDictionary *(^block2)(NSString *) = ^NSDictionary *(NSString *pramStr) { return @{@"test1":pramStr,@"test2":@(xValue)}; };
block分类.png

分类总结
1.没有用到外界变量或只用到全局变量、静态变量的block为全局block,生命周期从创建到应用程序结束
2.用到局部变量、成员属性变量的block为栈block,生命周期系统控制,函数返回即销毁
3.有强指针引用或copy修饰的成员属性引用的block会被复制一份到堆中成为堆block,没有强指针引用即销毁,生命周期由程序员控制

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 9,154评论 0 23
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,400评论 30 472
  • block学习 根据网上的block各种大神的资料,加入自己的理解。 一、初识block 1. block作用 b...
    Medivh阅读 5,059评论 0 50
  • 出新宏基大厦去楼下公交卡充值点充值。走到小蓝房窗前,才看见窗上贴着暂停充值的通知。小蓝房前窗紧闭,却没上挡板。似乎...
    铅笔芒种阅读 2,206评论 0 1
  • 不知不觉,坚持跑步已经一个月了,感觉不可思议,像我这种三分钟热度的人来说简直就是奇迹啊。有朋友问我怎么坚持的?说...
    Mr爱新觉罗阅读 3,477评论 1 1

友情链接更多精彩内容