zoukankan      html  css  js  c++  java
  • block

    • block方法和代理是可以互换的。

    block只能用copy,用strong是没用的:

    @property (nonatomic, copy) void (^hideBlock)();// 没有返回值,没有参数

    @property (nonatomic, copy) void (^setTitleBlock) (NSString *title);// 没有返回值,带参数

    @property (nonatomic, copy) NSString *(^getTitleBlock)();// 返回值是字符串

    block里面不能用self,要先转成weak

    copy状态下的block(堆里面的block)会对block里面使用的外部变量 强 引用,造成内存泄露。因为循环引用,见下图。解决方法是将block代码中,用的外部变量(self)先赋值给一个声明为weak的变量,之后再block代码中用这个weak变量。__weak ILsSettingViewController *setting = self;

    // 此处的void,代表返回值类型是block

    typedef void (^StatusSuccessBlock)(NSArray *array);

    typedef void (^StatusFailureBlock) (NSError *error);

     

    @interface StatusTool : NSObject

    // 此处的void,代表返回值类型是block

    + (void)statusesWithSuccess:(StatusSuccessBlock)success andFailure:(StatusFailureBlock)failure;

        //2.声明并赋值定义一个Block变量

        int (^addBlock)(int ,int )= ^(int x,int y){

            return x+ y;

        };

        

        //3.以Block作为函数参数,把参数像对象一样传递

        [self userBlockForOC:addBlock];

        

        //4. 将第2点和第3点合并一起,以内联定义的Block作为函数参数

        [self userBlockForOC:^(int x, int y){

            return x+y;

        }];

        [self userBlockForOC:^int(int x, int y) {

            return x+y;

        }];

        

    }

     

    //1.定义一个形参为Block的oc函数

    - (void)userBlockForOC: (int (^)(int x,int y))aBlock{

        NSLog(@"result = %d", aBlock(300,200));

    }

     

     

    总结如下:

    1.在Block内如果访问self的方法、变量、建议使用weakSef

    2.在Block中需要多次访问self,则需要使用StrongSelf

  • 相关阅读:
    python 指定文件夹下所有文件(包括子目录下的文件)拷贝到目标文件夹下
    python 删除文件或文件夹
    Computer Science Theory for the Information Age-1: 高维空间中的球体
    Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).
    王道论坛研究生机试练习赛(二)
    Jordan Lecture Note-11: 典型相关分析(Canonical Correlation Analysis, CCA).
    PAT 1021
    Jordan Lecture Note-10: Kernel Principal Components Analysis (KPCA).
    PAT 1020
    PAT 1019
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/4743382.html
Copyright © 2011-2022 走看看