我正在制作一款有三种不同尺寸的益智游戏。加载的图像取决于拼图的大小。为简单起见,我称之为小/中/大。当我加载我的视图时,我告诉它拼图的大小,我正在调用loadImages方法。
我有一个像这样设置的属性:
@property (nonatomic, retain) UIImage *solidSquare;
所以在我的loadImages方法中,我有:
self.solidSquare = [[[UIImage alloc] initWithContentsOfFile:solidPath] autorelease];
solidPath是根据拼图大小动态确定的。
现在,如果用户切换到不同的拼图大小,我会在游戏开始时再次调用loadImages。我该如何处理这种记忆情况?我觉得我需要在loadImages方法的开头调用它。
[self.solidSquare release];
我是吗?我如何评估它是否是第一次加载,或者我是否需要?
答案 0 :(得分:6)
不,你没有(或它会崩溃)。由于该对象是自动释放的,因此您不必再担心它的引用 - 它不会使其指针悬空并且不会泄漏内存。此外,使用属性时,属性设置器可确保自动释放旧对象。
总而言之,您可以安全地重新分配财产。
修改:但您执行必须在-dealloc中将其设置为nil
。
答案 1 :(得分:0)
当您调用autorelease时,它会将对象添加到自动释放池中,因此您无需显式释放它。如果您希望控制释放对象的时间,请不要调用自动释放并在您认为合适的位置释放对象。