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
    }
  • 相关阅读:
    PB中的函数ProfileString
    PB做大屏显示滚动窗口 [转载]
    PB对象(sqlca、sqlsa、sqlda)[转载]
    SQL中 EXCEPT、INTERSECT用法[转载]
    第一篇博客
    Intelli IDEA 炫酷插件
    概念总结
    秒杀系统(四)——异常处理和常量的处理
    秒杀系统(三)——实现哪些秒杀系统功能
    秒杀系统(二)
  • 原文地址:https://www.cnblogs.com/maxfong/p/2520871.html
Copyright © 2011-2022 走看看