zoukankan      html  css  js  c++  java
  • iphone开发学习,Block

    基本使用:

        void (^vFun)()=^(void){
            NSLog(@"void function");
        };
        vFun();//void function
      //void:返回类型
      //(^vFun):vFun代表函数名
      //(xx):传入参数的类型,为空代表木有参数
      //^(xxx):block格式,xxx代表传入参数
    int (^iFun)(int) = ^(int i){ return i; }; NSLog(@"%d",iFun(12345));//12345 NSString *str = @"World"; NSString* (^sFun)(NSString *, int)= ^(NSString *s1, int i){ return [s1 stringByAppendingString:str]; }; str = @"Max"; NSLog(@"%@",sFun(@"Hello ",2));//Hello World

    对于sFun,创建block对象时,此对象只会捕获当前引用值。以后引用值怎么变,只会使用之前的值。

    内存管理:

      Block对象可以发送retain等消息,但Block分配于栈,函数运行结束,系统会自动释放。

      让计数器+1,可以使用copy消息。

      保留Block对象的作用:1.在Block对象的函数外能执行此Block对象。
                             2.保存Block对象引用的对象。

      使用__block修饰符,系统不再保留Block对象内,指针所指向的对象。

      如上sFun()方法,在str方法前添加__block,sFun显示:Hello Max  

    __block NSString *str = @"World";

      Block对象内使用实例变量,self retainCount+1.
      可以使用局部变量。

    //@property (nonatomic, strong)NSString *name;
    - (void)method{
        //NSString *s = name;//name为实例变量.
        void (^aBolck)()=^(void){
            NSLog(@"Hello, %@", name);
        };
        void (^aCopy)()=[aBolck copy];
        aCopy();
        NSLog(@"%d", [self retainCount]);//不使用局部变量,值为2
    }
  • 相关阅读:
    (七)linux 学习 -- 键盘高级操作技巧
    (六)linux 学习 -- 从 shell 眼中看世界
    (五)linux 学习 --重定向
    (四)linux 学习 --使用命令
    (三)linux 学习 --操作文件和目录
    JavaScript封装好的方法
    覆盖Html5默认样式
    CSS的布局整理
    Vue学习笔记
    博客园添加和隐藏导航菜单
  • 原文地址:https://www.cnblogs.com/maxfong/p/2520871.html
Copyright © 2011-2022 走看看