block的使用

作者: 光明程辉 | 来源:发表于2016-03-02 22:50 被阅读75次

    总结起来就一句:

    谁传值,谁创建block;

    谁接收值谁实现block;

    block先实现,后调用!

    bolck 的使用?

    • 声明一个block
      @property (nonatomic, copy) void (testBlock^)(); // 使用 copy

      // 1.如果没有对block进行copy操作,block就存储于栈空间(指针)
      // 2.如果对block进行copy操作,block就存储于堆空间(app管理)

      // 3.如果block存储于栈空间,不会对block内部所用到的对象产生强引用
      // 4.如果block存储于堆空间,就会对block内部所用到的对象产生强引用
      Person *p = [[Person alloc]init];
      __weak typeof(p) weakP = p;
      p.testBlock = ^ {
      [weakP run]; // 强引用
      };

      2> block
      (1)、block的内存管理
      (2)、防止循环(retain)ARC :__weak , 非ARC __block

    • 如何修改 block 里面的值?
      __block XXXX XXX

    创建block时的2种方式:

    • 第一种:直接敲type就会有提示,然后回车。

    typedef 返回类型 (^名字) (参数);

    block快速创建.png
    • 然后:声明:(不过这样使用的,block似乎按回车是没有展开!)感觉使用起来不太爽!
      @property(nonatomic,copy) categoryIDchange categoryIDchangeBlock;

    • 第二种是:(可以说和第一种方式差不多,但是这种使用时,按回车时,就可以像CGD那样了!非常方便!!!)
      // 1、代码块属性【具体要操作的代码】 ---> 哪里是要做的事情就哪里写
      @property (nonatomic,copy) void (^categoryIDchange)(NSString *categoryId);

    • 调用:
      // 不要使用点语法,使用set方法,否则回车不会有效果
      [leftVC setCategoryIDchange:^(NSString *) {
      <#code#>
      }];

    相关文章

      网友评论

      本文标题:block的使用

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