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

相关文章

[Linux Kernel Block Layer第一篇] block layer架构设计

目录 1. single queue架构 2. multi-queue架构(blk-mq)  3. 问题 随着SSD快速存储设备的发展,内核社区越发发现,存储的性能瓶颈从硬件存储设备转移到了内核block layer,主要因为当时的内核block layer是single hw queue的架构,导致cpu锁竞争问题严重,本文先提纲挈领的介绍内核block layer的架构演进,然

block对变量捕获的方式

之前见很多文章对block捕获变量的方法,会进行诸如此类的描述:“block会捕获被引用的变量, 并对其进行copy操作, 因此, 可能会导致其引用计数加1,如果处理不好, 可能因循环引用导致内存泄漏。” 实际上, 这种说法并不严谨。block对变量的捕获, 根据变量类型的不同,会采用不同的捕获方式。 (1)静态或者全局变量, 在block中直接是指针传递的方式传入block中,对其进行的操作

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

Oracle - ORA-01789: Query block has incorrect number of result columns

一、原因     这个错误一般是在执行表之间的相加(union),相减(minus)等SQL语句时,两个个查询块具有不一致的结果列数所导致的。 二、方案     只要将两段SQL语句的列数调整为一致就可以解决。使用union时,要注意数据库字段的格式要一致,如varchar和nvarchar是不一样的。

Java中对象拷贝的深度解析:从零拷贝到深拷贝的演进

前言 在Java编程世界中,对象的拷贝是一个基础而重要的操作。它涉及到内存管理、数据一致性以及程序的健壮性等多个方面。随着软件架构的复杂化和数据的多样化,对象拷贝的策略也从最初的简单赋值(零拷贝)发展到深拷贝,以适应不同的场景需求。本文将从基本概念出发,深入探讨Java中对象拷贝的各种方式及其适用场景。 一、对象拷贝的基本概念 在Java中,对象拷贝通常指的是创建一个新对象,并将现有

ARC下的block导致的循环引用问题解析

引言 使用block已经有一段时间了,感觉自己了解的还行,但是几天前看到CocoaChina上一个关于block的小测试主题:【小测试】你真的知道blocks在Objective-C中是怎么工作的吗?,发现竟然做错了几道,才知道自己想当然的理解是错误的,所以抽时间学习了下,并且通过一些测试代码进行测试,产生这篇博客。 Block简介(copy一段) Block作为C语言的扩展,并不是高新

前端面试:对BFC规范(块级格式化上下文:block formatting context)的理解

块级格式化上下文(BFC)是一个独立的渲染区域,具有特定的布局规则。理解BFC对于前端开发非常重要,因为它影响元素的布局和定位。以下是对BFC的一些关键理解: 定义:BFC是一个HTML文档中的部分区域,内部的元素在该区域内独立于外部元素进行布局。BFC的创建可以通过特定的CSS属性,如overflow(非visible)、display: flow-root、position: absolut

猫猫学iOS 之BLOCK的妙用_利用block实现链式编程

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下: 调用: int main(

iOS CoreAnimation专题——原理篇(二) UIView block动画实现原理

前言CALayer的可动画属性UIView的block动画 注意 再次深入总结 前言 上一章中我们深入研究了UIView和它持有的那个CALayer之间的关系,知道了我们对UIView的各种属性的操作实际上都是间接的操作了CALayer对应的属性。 这一章中我们将进一步探究iOS动画,看看UIView是如何将CoreAnimation封装成block动画的。 CALaye