IOS开发(15)Objective-C-内存管理-自动释放池(@autoreleasepool)

2023-10-21 06:38

本文主要是介绍IOS开发(15)Objective-C-内存管理-自动释放池(@autoreleasepool),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 自动释放池的原理

存入到自动释放池中的对象,在自动释放池被销毁的时候,会自动调用存储在自动释放池中的所有对象的release方法。
这样,将创建的对象存储到自动释放池之中,就不再需要手动的release这个对象了。因为自动释放池销毁的时候,就会自动的调用自动释放池中所有的对象的release。

2 如何创建自动释放池

    //{}表示这个自动释放池的范围@autoreleasepool{}

3 如何将对象存储到自动释放池之中

在自动释放池之中调用对象的autorelease方法,就会将对象存储到当前自动释放池之中。
这个autorelease方法返回的是对象本身,所以,我们可以这么写

    @autoreleasepool {Person *person = [[[Person alloc] init] autorelease];   }

这个时候,当这个自动释放池执行完毕之后,就是立即为这个自动释放池中的对象发送1条release消息。

4 注意事项

  1. 只用在自动释放池中调用了对象的autorelease方法,这个对象才会被存储到这个自动释放池中。
  2. 对象创建可以写在自动释放池外边,在自动释放池之中,调用对象的autorelease方法,就可以将对象存储在自动释放池之中。
  3. 如果对象的autorelease方法的调用放在自动释放池的外面,就无法将其存储在这个自动释放池之中。
  4. 当自动释放池结束的时候,仅仅是对存储在自动释放池中的对象发送1条release消息,而不是销毁对象。
  5. 如果在自动释放池中,调用对象多次autorelease方法。在自动释放池结束的时候,会出现野指针问题。
  6. 在自动释放池中,如果调用已经存储在自动释放池中对象的release方法,会出现野指针问题
  7. 将对象存储到自动释放池中,并不会使对象的引用计数器+1。
  8. 自动释放池可以嵌套

5 autorelease使用规范

  1. 创建对象,将对象存储到自动释放池中,不需要手动release。
  2. 类方法创建对象,要求这个类方法中将创建的对象调用autorelease
    + (instancetype) person {return [[[self alloc] init] autorelease];}

这篇关于IOS开发(15)Objective-C-内存管理-自动释放池(@autoreleasepool)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示