重新分配自动释放的对象

Jam*_*B41 0 memory-management objective-c autorelease ios

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

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

@property (nonatomic, retain) UIImage *solidSquare;
Run Code Online (Sandbox Code Playgroud)

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

self.solidSquare = [[[UIImage alloc] initWithContentsOfFile:solidPath] autorelease];
Run Code Online (Sandbox Code Playgroud)

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

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

[self.solidSquare release];
Run Code Online (Sandbox Code Playgroud)

我呢?我如何评估它是否是第一次装载,或者我是否需要?

小智 6

不,你不(或它会崩溃).由于该对象是自动释放的,因此您不必再担心它的引用 - 它不会使其指针悬空并且不会泄漏内存.此外,使用属性时,属性设置器可确保自动释放旧对象.

总而言之,您可以安全地重新分配酒店.

编辑:但你必须将它设置为nil在-dealloc.