本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理。 
 
    
 
  先定义一个block变量,作为后续的例子中使用: 
 
  1. typedef void(^BlockCC)(void); 
2. BlockCC _block; 
  1、block中引用外部变量 
 
  block中可以直接使用外部的变量,比如 
 
               
                
         
            
            
            
            # iOS Block 属性
在 iOS 开发中,Block 是一种特殊的语法结构,它可以将一段代码作为一个变量进行传递。Block 可以捕获其定义范围内的变量,并且能够在需要时执行这段代码。在 Objective-C 中,Block 通常用于异步编程、回调函数、枚举和集合操作等场景中。
## Block 的基本语法
一个简单的 Block 如下所示:
```objective-c
^(参            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-09-21 11:08:30
                            
                                199阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            block 顾名思义就是代码块,将同一逻辑的代码放在一个块,使代码更简洁紧凑,易于阅读,而且它比函数使用更方便,代码更美观,因而广受开发者欢迎。但同时 block 也是 iOS 开发中坑最多的地方之一,因此有必要了解下 block 的实现原理,知其然,更知其所以然,才能从根本上避免挖坑和踩坑。需要知道的是,block 只是 Objective-C 对闭包的实现,并不是 iOS 独有的概念,在 C+            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-29 23:34:38
                            
                                108阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            block对变量的捕获  1:可以捕获不可以修改变量局部变量2:可以捕获且可以修改变量全局变量静态变量__block修饰的局部变量原理分析:  1. 局部变量为什么可以被捕获确不能修改int a = 10;
void (^blcok)() = [^{
    NSLog(@"%d",a);
} copy];
a=20;
blcok(); // log : a = 10
复制代码结果应该大            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-18 11:56:33
                            
                                62阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Linux stat命令Blocks字段与IO Block字段的理解原因在之前了解文件系统的时候,为理解块与扇区的概念,用到了stat命令。关于这个命令输出的信息的文章有很多,其他字段是没有争议的,但是在一些文章中对Blocks与IO Block理解有错误。结论先说结论Blocks字段指的是512字节构成的块的个数,IO Block是指文件系统的块的大小一般为4096字节。它们关系如下 网上有很多            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-04 13:05:40
                            
                                119阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            更新:2020-06-08-18:45:14。注意:查看正文前,请先查看文末的评论,以确认是否有勘误。在 《iOS面试题集锦(附答案)》 中有这样一道题目:在block内如何修改block外部变量?(38题)答案如下:38. 在block内如何修改block外部变量?注:本题代码请在仓库中查看以 Demo38 开头的工程(公众号请点击原文查看 GitHub 仓库)先描述下问题:默认情况下,在blo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-31 17:58:10
                            
                                40阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            10.1.3  定义属性属性涉及的内容比字段多,是因为它们在修改状态前还可以执行一些额外的操作。实际上,它们可能并不修改状态。属性拥有两个类似于函数的块,一个块用于获取属性的值,另一个块用于设置属性的值。这两个块也称为访问器,分别用get和set关键字来定义,可以用于控制对属性的访问级别。可以忽略其中的一个块来创建只读或只写属性(忽略get块创建只写属性,忽略set块创建只读属性)。当然            
                
         
            
            
            
            背景介绍在iOS开发过程中,我们经常会用到block这个对象,它可以作为函数的回调、类的属性等出现在我们的项目中,作为回调,block相对于代理方法,代码量更少,使用起来更方便,还可以使用与block定义同一作用范围的变量。当然,block的使用会让代码的逻辑不如使用代理清晰,萝卜青菜,各有所爱。下面我就对于block可以使用与它在同一作用范围的变量这一特性展开说一下自己的理解。正文先看这样一段代            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-05 20:24:12
                            
                                122阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # iOS 之 __block 修饰变量的深度解析
在iOS开发中,使用Block是一种常见的编程模式。Block提供了一种快捷的方式来处理回调、异步操作等场景。然而,当我们在Block内部引用外部变量时,往往会遇到一些问题。这时,`__block`修饰符便应运而生。本文将全面解析`__block`的用途、特性及使用示例,帮助开发者更好地理解和运用这一特性。
## 什么是 __block
在            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-10-09 06:40:03
                            
                                72阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.block是什么❓block在其他语言里又称闭包,可以叫匿名函数,代码块2.block有什么作用❓block的声明和实现一般不在一个类里,在一个类里也就没什么意思了,他的主要作用就是保存一个代码块,在声明的类里获取当前类的一些变量,然后传递到另一个block实现的类里面去执行,这也就完成了他的使命,对象间的传值和通信3.block的常见两大用途反向传值,正向就没必要了,属性 单例都很好实现,而            
                
         
            
            
            
                      一、block1. 介绍       之前已经学过许多的OC数据类型,现在又要学习一种特殊的数据类型,它也是苹果官方特别推荐的block类型,它的作用是封装代码,可以在任何时候调用,并且效率高。它与函数类似,但是函数却有缺点,函数必须在编译之前代码就要存在,而block封装的代码是以数据类            
                
         
            
            
            
            # iOS成员变量 __block 的实现方法
## 1. 概述
在iOS开发中,我们经常需要在block中对外部的变量进行修改,而且希望修改后的值在block外部也能生效。这时就需要使用到`__block`关键字来修饰变量。本文将介绍__block关键字的使用方法以及实现原理。
## 2. 流程
下面是使用__block关键字的一般流程:
| 步骤 | 描述 |
| ---- | ----            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-09-23 10:11:10
                            
                                46阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            普通变量。#import 
typedef void(^ MyBlock)(void);
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a = 2;
MyBlock block = ^{
a ++;
};
block1();
}
return 0;
}
#报错:变量a缺少__block修饰Block对应的C语言结构            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-19 21:30:14
                            
                                50阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、最简单的block1、最简单的block结构^{
    NSLog(@"this is a block");
    NSLog(@"this is a block");
    NSLog(@"this is a block");
};
复制代码2、block的调用^{
    NSLog(@"this is a block");
    NSLog(@"this is a block")            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-21 13:58:04
                            
                                47阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            #序言 《Block前言》中讲到,不论何种类型的Block都自带截获变量这一技能,而针对不同的变量类型和不同的情况,自动截获分为以下情况1.截获变量的值 2.截获对象,将对象指针传递进去 3.将变量拷贝到堆区域,并持有变量 4.截获变量内存地址现针对以上内容进行详细分析。#截获变量的值 这一情况主要发生在.对基本数据类型的引用(局部参数)来看基本数据常量int a = 0;
void (^lock            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-15 09:54:33
                            
                                131阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、捕获自动变量值  
   首先看一个经典block面试题: 
    
     [objc] 
     view plain 
     copy 
      
      
        1. int val = 10;  
2. void (^blk)(void) = ^{printf("val=%d\n",val);};  
3. val = 2;  
4. blk();   &            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-26 13:04:07
                            
                                37阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            更新记录时间版本修改2020年5月8日初稿1. 前言上篇文章《Block中修改局部变量的值为什么必须声明为__block类型》中,考虑到篇幅不宜过长,并没有给出探索Block捕获__block局部变量的代码例子。本文准备较详细地探索Block捕获__block局部变量的底层原理,也作为上篇文章的补充说明2. Block捕获__block局部变量代码剖析2.1 Block捕获__block局部变量代            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-11 21:51:09
                            
                                40阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前言:对block的简单笔记总结,1.本质:封装了函数调用和函数调用环境的对象2.block结构:3.block捕获变量:由于需要跨函数访问变量,所以需要捕获变量,(防止访问时已被销毁) - auto变量(基本数据类型):值捕获,超出作用域就被销毁了 - static变量:指针捕获, - 全局变量:直接访问 - self,也属于局部变量,(每个方法默认参数(            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-08 19:29:01
                            
                                114阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            本篇文章的主要内容了解何谓block。了解block的使用方法。Block 是iOS在4.0版本之后新增的程序语法.
 在iOS SDK 4.0之后,Block几乎出现在所有新版的API之中,换句话说,如果不了解Block这个概念就无法使用SDK 4.0版本以后的新功能,因此虽然Block本身的语法有点难度,但为了使用iOS的新功能我们还是得硬着头皮去了解这个新的程序概念。一、看一看什么是Blo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-27 10:22:13
                            
                                117阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # iOS Block 定义为属性
在 iOS 开发中,Block(代码块)是一种非常强大的特性,它可以包含一段需要执行的代码并且可以传递给其他方法或函数。将 Block 定义为属性,可以让我们更灵活地在类中使用这些代码块。本文将结合代码示例、序列图和流程图,带大家深入理解 iOS 中 Block 属性的定义与使用。
## 什么是 Block
Block 是苹果在 Objective-C 中