ios 内存管理个人一些见解

本文深入探讨iOS开发中内存管理的核心概念,包括引用计数、堆栈管理、堆内存分配等关键机制。通过实例解析,帮助开发者理解和掌握iOS应用内存优化的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发三年之余,感觉对ios的内存理解一直不是很透彻,打算这两天好好补补这方面的知识,要是有理解不对的地方大家多多包涵.欢迎来喷.

说到内存管理印象最深刻就是"黄金法则 - 如果一个对象使用了alloc,[mutable] copy,retain,那么你必须使用相应的release或autonrelease".

总的来说就是当你使用 alloc, retain ,new ,copy的时候引用计数器加1,使用release的时候引用计数器减1,当引用计数器为0 的时候释放内存调用dealloc方法,改对象就不能使用了.

规则:

1 . 在OC的类中使用了"引用计数器"(对象当前被引用的次数,也可以理解成指向内存区域的指针数)

2 . 最初对象的"引用计数" = 1  ([nsobject retainCount] = 1 Autorelease pool的存在,对于内存的管理会相当复杂,retainCount就不能用作调试内存时的依据了)在ARC开启的时候获取retainCount就得用一下的方法

CFGetRetainCount((__bridge CFTypeRef)myObject)

3 . alloc , copy , retain 一个对象的时候,改对象的引用计数加 1

4 . 当不需要对象的时候就给对象发送release 的消息,引用计数就自动减1

5 . 当引用计数等于0 的时候,自动调用dealloc 函数,对象就会释放内存

6 . 当对象引用计数 的时候再调用该对象,程序就会crash


内存管理可以分成"堆"和"栈"


在"堆"中内存管理都是用"引用计数"模式 ,而"栈"中不是

1. NSSTring 定义的对象是保持中所有没有引用计数,对他进行return操作是不会改变retainCount的(补充一下stack 是后进先出-LIFO 结构)

2.NSMutableSTring 定义的对象是保持中所有没有引用计数,对他进行return操作retainCount加1






 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值