美文网首页
Block学习

Block学习

作者: 小如99 | 来源:发表于2016-06-13 17:20 被阅读56次

之前一直都只知道用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,没有强指针引用即销毁,生命周期由程序员控制

相关文章

  • iOS开发-由浅至深学习block

    iOS开发-由浅至深学习block iOS开发-由浅至深学习block

  • iOS Block详解

    学习Block的章节 Block介绍(源码解析) 代码被编译后: __MCBlock__method_block_...

  • block学习

    block学习 根据网上的block各种大神的资料,加入自己的理解。 一、初识block 1. block作用 b...

  • ObjC的Block中使用weakSelf/strongSelf

    学习block帖子ObjC的Block中使用weakSelf/strongSelf @weakify/@stron...

  • block学习

    1,在传值方定义一个block typedefvoid(^requstBlock)(NSString* str);...

  • block学习

    通用的 block 声明de的结构体 main 里面的这个block的描述的结构体 main 里面的这个block...

  • Block学习

    之前一直都只知道用block,没有对block进行过总结和深入的理解。 个人觉得block就是一个介于变量和函数中...

  • block学习

    block为什么是用copy修饰 block属性的声明,首先需要用copy修饰符,因为只有copy后的block才...

  • Block 学习

    block 构成部分 ^(参数列){行为主体}; 例如:^(int a) {return a*a}; bl...

  • Block学习

    Block 让我们先来了解下Block是怎么定义的:返回值类型(^block变量名)(形参列表) = ^(形参列表...

网友评论

      本文标题:Block学习

      本文链接:https://www.haomeiwen.com/subject/ledydttx.html