Dan*_*Ray 2 iphone memory-management objective-c
在我的根视图控制器中,在我的didReceiveMemoryWarning方法中,我经历了几个数据结构(我保存在一个名为DataManager的全局单例中),并抛弃了我所拥有的最重的东西 - 一个或两个可能与二十个相关的图像或三十个或更多数据记录.
现在我正在经历并将这些设置为零.我也在为自己设置一个布尔标志,以便需要这些数据的各种视图控制器可以轻松地重新加载.正是如此:
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;
Run Code Online (Sandbox Code Playgroud)
今天我在想......虽然我并不确定当我这样做时,所有分配的内存真的被释放了.我应该代替release这些图片,也许打他们一个新的alloc和init当我再次需要他们以后呢?
正如mipadi所说,直接设置实例变量不会释放它所引用的对象.但是你在这里做的是不同的:你正在设置对象属性的值.根据声明属性的方式,可能确实释放它所引用的值.一个属性声明retain或者copy,而非assign,得到一个合成的访问方法(setImage:该方法.image =设置一个新的时释放其旧值语法转换为).因此,在这种情况下,如果您WondrMark的属性被声明为retain,通过属性将其设置为nil会自动释放旧图像.如果是assign,则需要在将属性设置为nil之前释放图像.
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |