gpt4 book ai didi

objective-c - 释放与设置为零以释放内存

转载 作者:行者123 更新时间:2023-12-03 20:36:11 25 4
gpt4 key购买 nike

在我的 Root View Controller 中,在 didReceiveMemoryWarning 方法中,我遍历了几个数据结构(我将其保存在名为 DataManager 的全局单例中),并放弃了我所拥有的最重的东西 - 一个或可能两个关联的图像可能有二十或三十或更多的数据记录。

现在我正在检查并将它们设置为零。我还为自己设置了一个 bool 标志,以便需要此数据的各种 View Controller 可以轻松知道要重新加载。因此:

DataManager *data = [DataManager sharedDataManager];
for (Event *event in data.eventList) {
event.image = nil;
event.thumbnail = nil;
}

for (WondrMark *mark in data.wondrMarks) {
mark.image = nil;
}

[DataManager sharedDataManager].cleanedMemory = YES;

今天我在想,但是......我实际上不确定当我这样做时所有分配的内存是否真的被释放。我是否应该释放这些图像,并在稍后再次需要它们时使用新的allocinit来命中它们?

最佳答案

正如 mipadi 所说,直接设置实例变量不会释放它所引用的对象。不过,您在这里所做的事情有所不同:您正在设置对象属性的值。根据该属性的声明方式,这可能确实会释放它所引用的值。声明为 retaincopy 的属性(而不是 assign)获取合成的访问器方法(即 setImage: 方法, .image = 语法转换为),在设置新值时释放其旧值。因此,在这种情况下,如果您的 WondrMark 属性被声明为 retain,通过该属性将其设置为 nil 会自动释放旧图像。如果是分配,则需要在将属性设置为nil之前释放图像。

关于objective-c - 释放与设置为零以释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com