
memory management before arc
添加对象:当将对象添加到NSMutableArray中时,对象会被发送retain消息,数组成为该对象的所有者,并持有其引用。 移除对象:当从NSMutableArray中移除对象时,对象会被发送release消息,数组放弃对该对象的所有权,并不再持有引用。 数组释放:当NSMutableArray被释放时,会向其中的所有元素发送release消息。 创建对象:如果使用alloc、new或copy等方法初始化对象,系统会增加retain count。你需要确保在不再需要该对象时通过release或autorelease释放它。 非所有对象:如果对象是通过其他方式获得的(如调用类方法),则不属于你。若要确保对象存在,需要发送retain消息。 释放对象:当你不再需要对象时,发送release或autorelease。release立即减少retain count,而autorelease会在autoreleasepool处理时发送release。 对象存活条件:只要对象有至少一个所有者,它就不会被释放。当retain count减少到零时,系统会发送dealloc消息。
发布日期:2025-04-13 16:49:20
浏览次数:9
分类:精选文章
本文共 1999 字,大约阅读时间需要 6 分钟。
在iOS开发中,对象的内存管理是开发者需要特别关注的事项。了解运行循环和autorelease机制可以帮助我们更高效地管理应用程序的内存。
运行循环与事件处理
iOS应用程序在运行时会持续执行一个事件循环。这个循环会检查是否有触发事件(如用户触摸或定时事件)。每当有事件发生时,应用程序会暂时退出事件循环,执行相应的方法处理。当处理完成后,应用程序会重新进入循环。循环结束时,所有使用了autorelease分配的对象会自动发送release消息。这意味着在执行方法时,我们可以安全地假设所有通过autorelease创建的对象不会被立即释放。
autorelease的使用
autorelease是一个非常有用的工具,它允许我们在不直接调用release方法的情况下释放对象。以下是autorelease的基本用法示例:
NSObject *x = [[[NSObject alloc] init] autorelease]; // 或Possession *newPossession = [[self alloc] initWithPossessionName:randomName valueInDollars:randomValue serialNumber:randomSerialNumber];return [newPossession autorelease];
autorelease的返回值是被发送release消息的对象,因此可以链式使用。
NSMutableArray的内存管理
NSMutableArray的内存管理遵循以下规则:
autorelease的其他示例
- (NSString *)description { NSString *descriptionString = [[NSString alloc] initWithFormat:@"%@ (%@): Worth $%d, Recorded on %@", possessionName, serialNumber, valueInDollars, dateCreated]; return [descriptionString autorelease];}
如果需要更长时间使用新创建的字符串,可以直接返回一个autorelease的拷贝。
属性和内存管理
@property (nonatomic, copy) NSString *possessionName
这个属性声明表示possessionName是一个复制的属性。它的 setter方法如下:
- (void)setPossessionName:(NSString *)str { id t = [str copy]; [possessionName release]; possessionName = t;}
dealloc方法
在dealloc方法中,我们需要释放所有保留的引用:
- (void)dealloc { [possessionName release]; [serialNumber release]; [dateCreated release]; [super dealloc];}
Retain count规则
这些规则有助于确保应用程序内存的高效管理,同时防止内存泄漏。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月30日 04时40分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
localStorage使用总结
2025-04-11
Lock 锁底层实现
2025-04-11
Lock和synchronized区别(以及Lock的使用)
2025-04-11
Log4j2 中format增加自定义的参数
2025-04-11
log4j补充
2025-04-11
Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合
2025-04-11
logback.xml 配置详解(1)
2025-04-11
logback.xml配置导入spring无法启动:ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while par
2025-04-11
logback的使用和logback.xml详解
2025-04-11
logback配置文件详解
2025-04-11
Logback配置输出sql
2025-04-11
logging.config报错FileNotFoundError
2025-04-11
Logstash input jdbc连接数据库
2025-04-11
logstash mysql 准实时同步到 elasticsearch
2025-04-11
Logstash是什么,干什么用的?带你详细认识
2025-04-11
Logstash简介和部署---ElasticStack(ELK)工作笔记019
2025-04-11
logstash设置开机自启动
2025-04-11
logstash详解
2025-04-11
Logstash语法入门
2025-04-11
loj #6485. LJJ 学二项式定理 (模板qwq)
2025-04-11