美文网首页
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,没有强指针引用即销毁,生命周期由程序员控制

    相关文章

      网友评论

          本文标题:Block学习

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