block-变量的捕获(capture)

本文详细探讨了Block如何捕获外部变量,分别分析了auto修饰、static修饰和全局变量的情况。通过源码分析发现,auto变量在Block内进行值传递,static变量捕获其地址,而全局变量未被Block捕获,因其全局可见性。
摘要由CSDN通过智能技术生成
为了能够保证block正常访问外部的变量,block有个变量捕获机制,如下图

捕获的变量

auto:自动变量,平时我们定义int age = 10,前面有个auto,auto int age = 10,系统帮我们默认的加上了一个auto。—–值传递—–
static:静态变量 —–指针传递—–
全局变量 —–直接访问—–

根据上面结论,我们一个个展开讨论和分析。

一、自动变量auto修饰的变量,auto int age = 10;
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        auto int age = 10;

        void (^block)(void) = ^() {
            NSLog(@"age = %d,",age);
        };

        age = 20;
        block();
    }
    return 0;
}

此main函数中的block,是我们常见的OC代码,那我们从声明 int age = 10;到将age的值改变age = 20,最后block输出的age会等于20吗
带着这个疑问,我们来分析一下底层代码的实现,OC–>C++的转换过程:cd到程序main.m的目录下,执行命令xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m,可以得到一个main.cpp文件,拖到工程目录中。

struct __main_block_impl_0 {
  struct __block_impl impl;
  struct __main_block_desc_0* Desc;
  int age;
  __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int flags=0) : age(_age) {
    impl.isa = &_NSConcreteStackBlock;
    impl.Flags = flags;
    impl.FuncPtr = fp;
    Desc = desc;
  }
};
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
  int age = __cself->age; // bound by copy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: custom-block-title是一个术语,它代表了自定义的块标题。块标题通常用于标识或命名一个块的内容或功能。而custom-block-title则进一步扩展了块标题的概念,它指的是用户自定义的块标题。 在软件开发中,自定义块标题常常用于定制化的界面设计或个性化的用户体验。通过使用自定义块标题,用户可以根据自己的需求和喜好来设置不同的块标题,使界面更加符合自己的使用习惯。这样,用户可以更方便地识别和记忆各个块的功能,提高使用效率。 举个例子,以一个个人待办事项应用为例。应用中可以有多个块,如今日任务、重要任务、已完成任务等。而使用custom-block-title,用户可以根据自己的习惯,将这些块的标题分别设置为“今日计划”、“重要事项”、“已完成清单”等,使界面更符合用户的思维和使用习惯。 总之,custom-block-title是一种允许用户自定义的块标题,用于更好地满足用户的个性化需求和提升用户体验。它可以应用于各类软件和应用中,提供更灵活和个性化的界面设计选项。 ### 回答2: custom-block-title是指自定义块标题的意思。在计算机编程中,块是指一段具有特定功能的代码,而标题则是对这段代码的简短描述。custom-block-title则是指使用者可以根据自己的需求来自定义块标题。 在编程界,自定义块标题通常用于提高代码的可读性和可维护性。通过使用自定义块标题,程序员可以清楚地了解代码块的功能和作用,从而更容易理解和修改代码。自定义块标题还可以帮助整理和组织代码,使得程序的架构更加清晰和有序。 一个常见的例子是在图形化编程中使用的自定义块标题。图形化编程语言通常提供了一系列可拖拽的块,每个块都代表一段特定的代码。通过自定义块标题,程序员可以为这些块添加自己定义的名称,使得程序的逻辑更加清晰和易于理解。 总之,custom-block-title是指可以根据需求自定义代码块标题的功能。这种特性可以提高代码的可读性和可维护性,并且在图形化编程中也有广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值