Block笔记

1. block访问外部变量


/**
 *  block内部访问外部值的问题
 *  block内部不允许修改外部变量值
 */
void test(){

    int m = 10;
    
    NSLog(@"1:m = %d",m);   //10
    NSLog(@"2:m addr = %p",&m);         //栈区
    //        NSString *str = @"abc";
    //        NSLog(@"str = %p",str);
    
    //定义变量,并且赋值
    //当定义block的时候,block会把外部变量以const的方式复制一份
    //存放到block的所在的内存中
    void (^myBlock)()=^{
        //m的值不能被修改
        //m = 100;
        
        NSLog(@"5:m addr = %p",&m);     //堆区
        //可以访问m的值
        NSLog(@"3:in block m = %d",m);  // ?
        
    };
    
    NSLog(@"4:m addr = %p",&m); //栈区
    //使用
    myBlock();
    
    
    // 1 2 4 5 3

}

-(void)test2(){

  __block int m = 10;
        NSLog(@"1:m add  = %p",&m);   //栈区地址
 
        //__block 不再以const的方式拷贝
        void (^myBlock)()=^{
            //m的值不能被修改
            m = 100;
//            n = 10;
//            int m = 100;
            NSLog(@"5:m addr = %p",&m);     //堆区
            //可以访问m的值
            NSLog(@"3:in block m = %d",m);  // ?
        
        };
        myBlock();
        
        NSLog(@"6:m = %d",m);  // ?
        NSLog(@"7:m addr = %p",&m);

}

inlineBlock
快捷键

  1. 善于抽取工具类方法
    代码放在它应该存在的地方
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Block 的实质 Block 是“带有自动变量值的匿名函数”,我们可以通过 Block 的实现来加深理解。首先通...
    yanging阅读 348评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,349评论 25 708
  • block简介 block 其实就是一个值,并且有类型。可以当做 int float 或者 Objective-C...
    刻舟求鉴阅读 261评论 0 0
  • 书道-心学。 以字入观,觉在当下。 随观得解,悟在当下。 由解起修,行在当下。 行起果现,正在当下。 开始...
    拳在心中阅读 313评论 0 1
  • 仪式感-过年过节送有心意的礼物给客户 个性化-了解客户,做客户的朋友,通过有个性化的礼品及语言 成人世界物质欲望总...
    邱秋秋_5a43阅读 162评论 0 0