热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OC基础ARC

一.了解ARCARC:自动引用计数(AutomaticReferenceCounting)是Objective-C默认的neicun管理机制,其针对堆上的对象,由编译器自动

一.了解ARC
ARC:自动引用计数(Automatic Reference Counting)是Objective-C默认的neicun管理机制,其针对堆上的对象,由编译器自动生成操作引用计数的指令(retain或者release),来管理对象的创建和释放

1).哪些对象受ARC的管理:
a.OC对象指针
b.Block指针
c.使用attribute((NSObject))定义的typedef
2).哪些对象不收ARC的管理
a.值类型(简单值类型,C语言struct)
b.使用其他方式分配的堆对象(使用c语言的malloc分配)
c.非内存资源

二.引用计数管理
1).新创建(使用alloc,new,copy等)一个引用类型对象,引用计数为1

2).对象引用计数增1——–retain操作:
a.将对象引用赋值给其他变量或者常量
b.将对象引用赋值给其他属性或者实例变量
c.将对象传递给函数参数,或者返回值
d.将对象加入到集合中

3).对象引用计数减1——–release操作:
a.将局部变量或者全局变量赋值为nil或者其他值
b.将属性赋值为nil或其他值
c.实例属性所在的对象被释放
d.参数或者局部变量离开函数
e.将对象从集合中删除

4).引用计数为0时,内存自动释放

三.自动释放池
1).release会导致对象立即释放,如果频繁对对象进行release,可能会造成琐碎的内存管理负担。autorelease可以将release的调用延迟到自动释放池被释放时。
2).推荐使用自动释放池(Autorelease Pool)Block,当期结束时,所有接受autorelease消息的对象将会被立即释放(即发送release消息)
3).AppKit和UIKit框架在处理每一次事件循环迭代时,都会将其放入一个Autorelease Pool中。大多数情况,开发人员无需处理。

四.什么时候需要手工管理Autorelease Pool
1).编写的程序不基于UI框架,如命令行程序
2).在循环中创建大量临时对象,需要更早地释放,避免临时对象聚集导致内存峰值过大
1).在主线程之外创建新的线程,在新线程开始执行处,需要创建自己的Autorelease Pool
1).可以嵌套使用Autorelease Pool


推荐阅读
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 程序员易犯的六种错误,第二条就让人头疼不已
    每个程序员都有可能犯错,尤其是在编写代码时。本文列举了一些常见的编程错误,以及如何避免这些陷阱。来看看你是否也曾经遇到过这些问题。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文详细介绍了如何使用jQuery防止事件冒泡,确保子元素的点击事件不会触发父元素或祖先元素的相应事件。通过具体的代码示例和解释,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文将详细介绍如何在Linux操作系统中执行PHP脚本,包括环境配置、命令使用及验证方法。对于需要在Linux环境下开发或部署PHP应用的用户来说,这是一篇非常实用的文章。 ... [详细]
  • Python入门:第一天准备与安装
    本文详细介绍了Python编程语言的基础知识和安装步骤,帮助初学者快速上手。涵盖Python的特点、应用场景以及Windows环境下Python和PyCharm的安装方法。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
  • C语言标准及其GCC编译器版本
    编程语言的发展离不开持续的维护和更新。本文将探讨C语言的标准演变以及GCC编译器如何支持这些标准,确保其与时俱进,满足现代开发需求。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
author-avatar
手机用户2602913921
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有