iphone开发--内存管理

article/2025/4/20 9:26:45

         内存管理是iphone开发中很重要的一个环节,没有处理好会是系统出现很多问题,

很严重的一个就是直接导致程序闪退。因此,内存管理是很让新手头疼的,也是新手晋

级为菜鸟必走的一个环节。今天讨论的主题就是内存管理。

       内存管理包括:内存分配,对象使用,对象挂起,对象使用,内存释放。在使用之前

我们要为其分配空间,使用中保留其空间,使用完后要释放其空间。简单的分配和释放只

是内存管理的初级阶段。当我们引入对象所有权这一概念时,内存管理的难度就变大了。

对象所有权与接下来要解释的三个名词有关。

       首先,我们要解释三个名次:create,retain和copy。

       create和retain都会使对象的【object count】值加1,此时拥有对象所有权,因此使用

完后必须对其释放。copy不会是对象的【object count】值加1,此时没有拥有对象所有权,

使用完后不需对其释放。

在对象定义中需要注意的点(以NSMutbaleString和NSMutableArray为例):

NSMutableArray

initWithObject:       //对象的引用计数值不变

arrayWithObject:             //对象的引用计数值不变  

arrayWithObject:           //对象的引用计数值加1

addObject:                        //对象的引用计数值加1

arrayWithArray:      //对象的引用计数值加1,被参考的引用对象值也加1

initWithArray:             //对象的引用计数值加1

  initWihtArray: copyItem:     //对象的引用计数值从1开始


NSMutableString

initWithFormat:         //对象的引用计数值不变

initWithString: //对象的引用计数值不变

        然后开始说明,在对象使用中的内存管理。

        在容器中添加对象,将使对象的【object count】值加1,包括nsarray、nsdictionary。

引用的对象在使用完后需要释放,否则会导致内存泄漏。

在getter和setter方法中:

-(NSNumber *)count

{

    return _count;

}

-(void)setCount:(NSNumber *)newCount

{

    [newCount retain];

    [_count release];.//在OC中,对象为没有初始化也可以执行这一步操作

    _count = newCount;

}

-(void)reset

{

    NSNumber *zero = [[NSNumber alloc] initWithInteger:0];

    [self setCount:zero];

    [zero release];

}

-(void)reset

{

      NSNumber *zero = [NSNumber initWithInteger:0];

      [self setCount:zero];

}


在类变量初始函数和析构函数(dealloc)中,不需要对类变量执行初始化操作。

-init

{

    self = [super init];

    if(self)

    {

    _count = [[NSNumber alloc] initWithInteger:0];

    }

     return self;

}

-initWithCount:(NSNumber *)startingCount

{

self = [super init];

    if(self)

    {

        _count = [startingCount copy];

    }

    return self;

}

使用中的对象可能面临着被释放的危险,包括如下两种情况

 1> heisenObject将被释放:

        heisenObject = [array objectAtIndex:n];

        [array removeObjectAtIndex:n];


2>

id parent = <#create a parent object#>;

heisenObject = [parent child];

[parent release];

因此防止如上情况的出现,我们可以采取如下的对策:

heisenObject  = [[array objectAtIndex:n] retain];

[array removeObjectAtIndex:n];

//user heisenObject...

[heisenObject  release];

最后,附上官网上关于内存管理的解说图对此次内存管理解说做个总结。希望对大家掌握内存管理有所帮助!


     


http://chatgpt.dhexx.cn/article/gxjJLUkQ.shtml

相关文章

开源超融合私有云神器proxmox VE

Prxomox VE由位于奥地利维也纳的Proxmox Server Solutions GmbH开发&#xff0c;这让人有点意外。其实欧洲在IT技术方面&#xff0c;还是很强的&#xff0c;比如大名鼎鼎的mysql&#xff0c;出自瑞典&#xff1b;分布式文件系统moosefs&#xff0c;出自波兰。Proxmox主打产品有…

超融合基础架构

以软件为中心&#xff0c;替代传统架构 超融合基础架构是一种融合的、统一的 IT 基础架构&#xff0c;它包含了传统数据中心常见的元素: 计算、存储、网络以及管理工具。超融合基础架构解决方案是以软件为中心&#xff0c;结合 x86 或 ARM 架构的硬件替代传统架构中昂贵的专用硬…

VSAN超融合笔记

VMware VSAN VMware vSAN是一款软件定义的企业存储解决方案&#xff0c;支持超融合基础架构&#xff08;Hyper-Converged Infrastructure,HCI&#xff09;系统。VSAN使用软件定义的方法为虚拟机创建共享存储。可以虚拟化ESXI主机的本地物理存储资源&#xff0c;并将这些资源转…

浅谈——服务器虚拟化超融合存储

目录 一、服务器虚拟化&#xff1a; 二、服务器虚拟化技术优点&#xff1a; 三、基于虚拟服务器的双机热备&#xff08;VM漂移技术&#xff09; 四、服务器的超融合技术 五、服务器的存储&#xff1a; ①FC存储&#xff1a; ②FCOE技术存储 ③iSCSI存储 六.服务的分类: 一…

超融合和虚拟化区别-学习笔记

前沿,传统数据中心的特点。 传统的数据中心可以归为三层架构(虚拟化、服务器)、网络设备、存储设备。主要缺点为: ① 性能方面:程序放在SERVERS上,与这些程序相关的数据存在SAN,NETWORKING(IP/FC网络)成为瓶颈。 ② 可扩展方面:扩展业务,不能在此架构下淘汰更换SAN…

超融合相关知识整理

一、基本概念 HCI是一种横向扩展&#xff0c;软件集成的基础架构&#xff0c;它采用模块化方法来计算&#xff0c;网络和存储容量。HCI没有使用专用硬件&#xff0c;而是利用了分布式&#xff0c;水平的商品硬件块&#xff0c;并提供了一个用于报告和管理的单窗格仪表板。外形…

虚拟化、云计算与超融合的简单总结

一、概述 近期研究了一下超融合的内容&#xff0c;简单做了下学习总结。 虚拟化是一种基本思想&#xff0c;是云计算、超融合的基础&#xff0c;在信息系统的各层都有不同的应用&#xff0c;举例来说&#xff1a; 存储虚拟化&#xff0c;存储阵列就是将若干集中部署的磁盘先汇总…

超融合之VMware vSAN企业级超融合解决方案

一、什么是VMware vSAN&#xff1f; 软件定义的存储&#xff08;vSAN&#xff09;是软件定义的数据中心的基本组件&#xff0c;可对存储资源进行抽象化处理&#xff0c;以支持存储的池化、复制和按需分发。这使存储层与虚拟化计算层非常相似&#xff1a;都具有聚合、灵活、高效…

深信服超融合技术架构(重点介绍主要模块)

目录 超融合架构定义系统总体架构 1.aSV 计算机虚拟化平台1.1 概述1.2 aSV 技术原理1.2.1 Hypervisor 分类(1)裸金属型(2)宿主型(3) aSV 的 Hypervisor 实现 1.3 aSV 技术特性1.3.1 内存 NUMA 技术1.3.2 SR-IOV1.3.3 Faik-raid1.3.4 虚拟机生命周期管理1.3.5 虚拟机热迁移 1.4 …

微软超融合+混合云:源自Azure技术的超融合架构

--------------------------------------------------------------------------------------------------------- 2021年5月更新&#xff1a; Azure Stack HCI 2021年5月10日正式落地Azure世纪互联&#xff0c;中国Azure的用户可以更简单的在本地的数据中心建立微软混合云&am…

转:什么是超融合?超融合有什么作用,超融合的概念.

中国人非常喜欢这个“融”字&#xff0c;IDC数据显示&#xff0c;2015年中国超融合市场整体规模达到9170万美元&#xff0c;超过2014规模的3倍&#xff0c;在Gartner 2016年7月公布的技术成熟度曲线中&#xff0c;超融合位于期望膨胀期的最顶点&#xff0c;这预示着&#xff0c…

超融合

在云架构中&#xff0c;首先要了解“融合”是什么含义&#xff1f;融合就是将两个或多个组件组合到一个单元中&#xff0c;组件可以是硬件或软件。就虚拟化和私有云而言&#xff0c;按照是否完全以虚拟化为中心&#xff0c;融合分为物理融合和超融合两种。 超融合是融合的一个…

2021-7-14-超融合基础知识

超融合基础知识 内容参考&#xff1a; Mars小歪&#xff0c;四海骄阳&#xff0c;钱曙光 1&#xff0c;什么是超融合 既然在说超融合架构&#xff0c;那就肯定有一般的融合架构&#xff0c;这其实也是目前行业内对于超融合定义争论的焦点&#xff0c;也就是说哪些定义为融合…

超融合及其意义

前言 当下超融合是个热门的词&#xff0c;那么超融合融合了什么&#xff1f;为什么要搞超融合&#xff1f;超融合架构如何搭建&#xff1f;了解超融合对个人和企业分别有何意义&#xff1f;本文将阐述作者自己的理解和看法。 IT基础架构演进与超融合 从IT基础架构的演进可以…

HX/VSAN超融合技术学习笔记

几种不同的基础架构 1.独立机架式服务器 资源无法灵活的扩容和更换 2.serverSAN存储架构 计算资源无法灵活的扩容和更换 存储池化&#xff0c;但是计算资源、内存还是无法灵活更换 3.ServerSAN存储架构应用群集 同个应用运行在多个server上&#xff0c;可灵活调整使用的计算…

【存储】超融合(HCI)和云是什么以及区别|超融合和虚拟化的区别

目录 什么是超融合(HCI) 简介 超融合和云计算的区别 超融合和虚拟化的区别 与虚拟化对比来解释超融合 超融合的技术特点 超融合的优势和限制 超融合应用场景 超融合厂商 云计算 (一)云是什么 (二)云计算是什么 (三)特点 (四)云资源的部署模式 (五)云计算的优劣势 (六)云计算的服…

【理论研究】漫谈云计算IT基础设施05-超融合技术

其实超融合这一块&#xff0c;放在云计算IT基础设施里面&#xff0c;不算是完全合适。你说它是分布式存储&#xff0c;但是它同时又是硬件服务器与存储&#xff1b;你说它算硬件&#xff0c;但是它又离不开分布式存储软件。 一、超融合架构 传统的IT基础设施架构&#xff0c;…

到底什么是超融合呢?

一.超融合快速入门 当下&#xff0c;企业IT领域刮起了一阵"超融合"浪潮&#xff0c;无论是大型企业还是初创厂商都积极投身到超融合领域&#xff0c;直至今天&#xff0c;超融合概念依旧 "高烧不退"。 不过&#xff0c;虽然关于超融合的文章很多&#xff0…

如何快速找到自己手机号码或邮箱注册过哪些网站

今天无聊逛某瓣&#xff0c;发现有人推荐了个网站 手贱点进去看了下 如图&#xff0c;他们这个网站名字很简单也很符合他们的功能 找回你注册过的网站 这是个查询注册过哪些网站 很实用 我简单输入我的手机号 就查询到结果了 我这个号码居然有超过10条记录&#xff01;&#…

【网站备案】找回备案密码

1、打开工信部备案系统&#xff0c;点击右下角的「找回备案密码」 http://www.miitbeian.gov.cn/state/outPortal/loginPortal.action 2、选择你备案信息的所在地 3、粘贴你的网站备案号以及其他备案信息&#xff0c;提交之后&#xff0c;会发短信通知你备案密码。 网站备案…