block什么时候拷贝到堆上

2024-05-12 18:52
文章标签 拷贝到 block

本文主要是介绍block什么时候拷贝到堆上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Objective-C 中,block 在以下情况下会被拷贝到堆上:

  1. 手动拷贝:当你显式调用 Block_copy() 函数时,block 会被拷贝到堆上。

  2. 强引用:在使用自动引用计数(ARC)的环境中,当你将一个栈上的 block 赋值给一个强引用的属性、变量或者集合类型时,编译器会自动将该 block 拷贝到堆上。

  3. 作为函数参数:当你将一个 block 作为函数或方法的参数传递,且这个函数或方法将该 block 存储为强引用时,block 会被拷贝到堆上。

  4. GCD函数:当你将一个 block 提交到 Grand Central Dispatch (GCD) 的队列中执行时,block 会被拷贝到堆上。

  5. 返回block:当你从一个函数或方法中返回一个 block 时,如果该 block 是在栈上创建的,那么在返回时会自动拷贝到堆上。

  6. 闭包捕获:当 block 被用作闭包并捕获了作用域内的变量时,如果这个 block 被预期会在其定义作用域之外使用(比如被赋值给一个强引用属性或变量),则它会被拷贝到堆上。

在非 ARC 环境中,开发者需要手动管理 block 的内存,包括使用 Block_copy() 和 Block_release() 来拷贝和释放 block。在 ARC 环境中,编译器会自动处理大多数关于 block 内存管理的事情,但开发者仍需要注意避免循环引用等问题。

总之,当 block 需要在其定义的作用域之外存活时,block 就会被拷贝到堆上,从而其生命周期得以延长,并由 ARC 或手动引用计数管理

这篇关于block什么时候拷贝到堆上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983450

相关文章

[ip核][vivado]Block Menory Gennerator 学习

<刘东华的xilinx系列FPGA芯片IP核详解>读书摘录: 1. 2. 3.

Block-Max-Maxscore(Lucene 9.10.0)

Lucene中基于论文:Optimizing Top-k Document Retrieval Strategies for Block-Max Indexes 实现了Block-Max-Maxscore (BMM) 算法,用来优化关键字之间只有OR关系,并且minShouldMatch <= 1时的查询。比如有查询条件为:term1 OR term2 OR term3,那么文档中至少包含其中一个

torch/lib/libgomp-d22c30c5.so.1: cannot allocate memory in static TLS block的正解

torch/lib/libgomp-4dbbc2f2.so.1.0.0: cannot allocate memory in static TLS block的正解 只需要一行命令即可解决 export LD_PRELOAD=/home/ma-user/anaconda3/envs/MindSpore/lib/python3.9/site-packages/torch/lib/../../to

YoloV8改进策略:Block篇|即插即用|StarNet,重写星操作,使用Block改进YoloV8(全网首发)

摘要 本文主要集中在介绍和分析一种新兴的学习范式——星操作(Star Operation),这是一种通过元素级乘法融合不同子空间特征的方法,通过元素级乘法(类似于“星”形符号的乘法操作)将不同子空间的特征进行融合,从而在多个研究领域中展现出出色的性能和效率。 星操作在自然语言处理(NLP)和计算机视觉(CV)等多个领域中都得到了成功应用。例如,在自然语言处理中,Monarch Mixer、M

KVC模式讲解和Block语法

KVC键值编码,使用完整实例: #import <Foundation/Foundation.h> @interface Course : NSObject {     NSString* courseName; } - (NSString*)description; @end   #import "Course.h" @implementation Course - (NS

【YOLOv10轻量级涨点改进:block优化 | 华为诺亚2023极简的神经网络模型 VanillaNet】

本文属于原创独家改进:一种极简的神经网络模型VanillaNet,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块 计算量参数量比较,8.4 GFLOPs降低至6.1 GFLOPs YOLOv10n summary: 385 layers, 2709380 parameters, 2709364 gradients, 8.4 GFLOPsYOLOv10n-Van

对象间的通信之delegate、notificationCenter与block

在项目开发中,常常会涉及到对象之间的通信,而为了降低对象间的耦合,会采用delegate、notificationCenter、block三种方式来进行实现,对于他们的使用,也许大家都能熟练掌握,但是对于如何创建,初学者也许只是一知半解,本文不讲长篇大论,仅通过简单的实例来帮助大家学习三者的使用,希望对尚不了解以上三者的朋友能带来一定的帮助。 一、delegate 估计大家最常用的del

Hadoop处理跨block行源码分析记录

Hadoop的block大小默认为64M,将一个大文件按64M切分block,分发到各个datanode存储,那么必然会造成一行数据分布到不同block,不同的datanode,那Hadoop是如何处理的这种情况? 以TextInputFormat格式为例,LineRecordReader设计的足够健壮,当读到该分片最后一条未遇到终止符,会继续读取下一个分片的数据,直到读取出完整的数据行,下一个

assets目录下的zip文件拷贝到sd卡下

public static void unZip(Context context, String assetName,String outputDirectory,boolean isReWrite) throws IOException {//创建解压目标目录File file = new File(outputDirectory);//如果目标目录不存在,则创建if (!file.exists