0

我正在构建一个具有三种不同大小的益智游戏。加载的图像取决于拼图的大小。为简单起见,我将它们称为小/中/大。当我加载视图时,我会告诉它拼图的大小,并调用 loadImages 方法。

我有一个这样设置的属性:

@property (nonatomic, retain) UIImage *solidSquare;

所以在我的 loadImages 方法中,我有:

self.solidSquare = [[[UIImage alloc] initWithContentsOfFile:solidPath] autorelease];

solidPath 是根据拼图大小动态确定的。

现在,如果用户切换到不同的拼图大小,我会在游戏开始时再次调用 loadImages。我该如何处理这种内存情况?我觉得我需要在我的 loadImages 方法开始时调用它。

[self.solidSquare release];

我吗?我如何评估它是否是第一次加载,或者我什至需要这样做?

4

2 回答 2

6

不,你没有(否则它会崩溃)。由于对象是自动释放的,您不必再担心它的引用——它不会使其指针悬空,也不会泄漏内存。此外,在使用属性时,属性设置器会确保自动释放旧对象。

总而言之,您可以安全地重新分配财产。

编辑:但您必须将其设置为nil-dealloc。

于 2012-08-04T15:12:49.750 回答
0

当您调用 autorelease 时,它​​会将对象添加到 autorelease 池中,因此您不需要显式释放它。如果您想控制何时释放对象,请不要调用 autorelease 并在您认为合适的地方释放对象。

于 2012-08-04T15:13:20.007 回答