一、block1. 介绍 之前已经学过许多的OC数据类型,现在又要学习一种特殊的数据类型,它也是苹果官方特别推荐的block类型,它的作用是封装代码,可以在任何时候调用,并且效率高。它与函数类似,但是函数却有缺点,函数必须在编译之前代码就要存在,而block封装的代码是以数据类
# iOS成员变量 __block 的实现方法
## 1. 概述
在iOS开发中,我们经常需要在block中对外部的变量进行修改,而且希望修改后的值在block外部也能生效。这时就需要使用到`__block`关键字来修饰变量。本文将介绍__block关键字的使用方法以及实现原理。
## 2. 流程
下面是使用__block关键字的一般流程:
| 步骤 | 描述 |
| ---- | ----
原创
2023-09-23 10:11:10
46阅读
成员变量和局部变量的区别 成员变量: 1、成员变量定义在类中,在整个类中都可以被访问。 2、成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
转载
2023-07-27 20:58:03
96阅读
序言Blocks是苹果出的轻量型回调方式,使用起来既简洁,又方便。不过就是会产生一个问题:循环引用。进而会导致内存释放不了,造成内存泄漏。那到底怎么样才会产生循环引用呢?如何解决呢?这篇文章我们就用多个案例从本质上去解析到底啥是循环引用案例解析typedef void(^Blk_t)(void);
复制代码案例1我们首先先来看一个循环引用的案例 声明一个全局变量@property (nonatom
转载
2023-10-01 23:04:58
81阅读
Student.h: #import <Foundation/Foundation.h> @protocol Study,Learn; @interface Student : NSObject<Study,Learn> @end Student.m: #import "Student.h" #import "Study.h"
原创
2013-08-02 14:54:00
225阅读
Student.h:#import @protocol Study,Learn;@interface Student : NSObject@endStudent.m:#import "Student.h"#import "Study.h"#impt@endStudy.h:#impor
原创
2023-04-27 11:46:01
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阅读
更新:2020-06-08-18:45:14。注意:查看正文前,请先查看文末的评论,以确认是否有勘误。在 《iOS面试题集锦(附答案)》 中有这样一道题目:在block内如何修改block外部变量?(38题)答案如下:38. 在block内如何修改block外部变量?注:本题代码请在仓库中查看以 Demo38 开头的工程(公众号请点击原文查看 GitHub 仓库)先描述下问题:默认情况下,在blo
转载
2023-10-31 17:58:10
40阅读
背景介绍在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阅读
本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理。
先定义一个block变量,作为后续的例子中使用:
1. typedef void(^BlockCC)(void);
2. BlockCC _block;
1、block中引用外部变量
block中可以直接使用外部的变量,比如
普通变量。#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阅读
1.block是什么❓block在其他语言里又称闭包,可以叫匿名函数,代码块2.block有什么作用❓block的声明和实现一般不在一个类里,在一个类里也就没什么意思了,他的主要作用就是保存一个代码块,在声明的类里获取当前类的一些变量,然后传递到另一个block实现的类里面去执行,这也就完成了他的使命,对象间的传值和通信3.block的常见两大用途反向传值,正向就没必要了,属性 单例都很好实现,而
#序言 《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。了解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阅读
前言:对block的简单笔记总结,1.本质:封装了函数调用和函数调用环境的对象2.block结构:3.block捕获变量:由于需要跨函数访问变量,所以需要捕获变量,(防止访问时已被销毁) - auto变量(基本数据类型):值捕获,超出作用域就被销毁了 - static变量:指针捕获, - 全局变量:直接访问 - self,也属于局部变量,(每个方法默认参数(
转载
2023-09-08 19:29:01
114阅读
Block如何捕获外部变量一:基本数据类型共有三种:auto变量 、static变量、全局变量 这一篇,我们详细讲解Block捕获外部变量的机制.我们把block捕获外部基本数据类型变量的情况分为以下几种,见下图: 一:auto变量auto变量:自动变量,离开作用域就会销毁,一般我们创建的局部变量都是auto变量 ,比如 int age = 10,系统会在默
转载
2024-05-14 21:34:07
54阅读
成员变量定义在类里方法外的变量。成员变量又分为实例变量(全局变量)和类变量类变量也叫静态变量,变量前加static ;实例变量也叫对象变量,不加static ;类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则为对象私有,某一个对象将其值改变,不影响其他对象;类变量:访问类变量用对象名. 类变量名 或 类名.类变量名所有对象的同一个类变量都是共享同一块内存空
转载
2023-07-22 20:22:29
110阅读