GC垃圾回收机制,iOS内存管理。
问题: MRC中通过调用静态方法创建的新对象,不再使用时需要对其发送release消息吗?
不需要,因为约定静态方法创建的对象会自动将其放入自动释放池,即已对其发送autorelease消息,因此不可再对其进行手动释放。MRC中静态方法创建新对象的实现模板如下:
问题: NSRangeException, EXC_BAD_ACCESS, 僵尸对象, 野指针,空指针?
NSRangeException: 常见于数组越界。
EXC_BAD_ACESS: 野指针问题(内存泄漏), 调用了已经释放的对象或则对象的重复释放。
僵尸对象:引用计数为0,对象可能存在但是内存已被系统回收,这部分内存可能随时被别的对象申请占用。
野指针: 指针没有被赋值,或者指向的对象已经被释放。
空指针: 没有指向任何东西的指针,是一个有效指针(nil, null, 0)
问题: 垃圾回收机制?
https://blog.csdn.net/zuopizhuanshupi/article/details/82791274
垃圾回收机制是由垃圾收集器Garbage Collection GC来实现的,是一种低优先级的后台线程,会不定时的执行已回收‘不可达的对象’。JAVA虚拟机中使用的是‘自适应,分代的,停止-复制,标记-清扫’式垃圾回收器。相对于‘RC引用计数’来说是‘宏观+延时’的。
问题: 引用计数?
当引用计数为0时释放掉对象
问题: 如果一个对象释放前被加到了NotificationCenter中,不在NotificationCenter中remove这个对象可能会出现什么问题?
EXC_BAD_ACCESS 将对象添加到通知中心后,通知中心会保存该对象的指针。当对象被释放后通知中心中添加的指针变成了野指针
问题:什么是安全释放?
释放掉不在使用的对象时,不会造成内存泄漏或指针悬挂问题。
问题: 字符串的引用计数MRC下
// 用format形式生成的字符串,如果字符串长度小于10保存在常量区,大于10保存在堆区。其余形式在常量去。 NSString *str = @"123"; NSString *str2 = [NSString stringWithString:@"23"]; NSString *str3 = [NSString stringWithFormat:@"123456789"]; NSString *str4 = [NSString stringWithFormat:@"1234567890"]; NSString *str5 = [[NSString alloc] initWithString:@"34"]; NSString *str6 = [[NSString alloc] initWithFormat:@"123456789"]; NSString *str7 = [[NSString alloc] initWithFormat:@"1234567890"]; NSLog(@"\n %lu \n %lu \n %lu \n %lu \n %lu \n %lu \n %lu \n %lu", [str retainCount], [str2 retainCount], [str3 retainCount], [str4 retainCount], [str5 retainCount], [str6 retainCount], [str7 retainCount]);
问题: autoReleasePool自动释放池
自动释放池用于避免临时变量造成的内存峰值。
在主线程中会自动开启一个autoReleasePool, 当一次Runloop执行完毕后,会释放掉autoReleasePool,并向pool中的所有对象发送一次release消息,释放了就得autoReleasePool后,会在新建一个autoReleasePool。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix