新手的记忆管理困惑

时间:2011-02-14 21:19:16

标签: objective-c memory-management

由于我对Objective-C和内存管理很陌生,我很好奇这段代码是否正常 -

首先,返回UIImageView的代码 -

-(UIImageView *)somethingAnimation {

UIImageView *something = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Something.png"]];
something.frame = CGRectMake(-100, -100, kSomethingWidth, kSomethingHeight);

return something; // released later by the Swarmer object

}

然后调用它的代码,其中UIImageView *在界面中声明了什么,然后这是在实现中 -

something = [controller somethingAnimation];

以后 -

[something release];

这是否正确释放了一切?似乎没有内存或崩溃问题。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Memory Management Programming Guide定义了一组命名约定,用于确定方法是应返回“拥有”对象还是自动释放对象。根据这些约定,名为-somethingAnimation的方法应该肯定返回一个自动释放的对象。因此,在您的情况下,您应该返回[something autorelease],然后不再发布它。

答案 1 :(得分:2)

技术上有效,但这是不好的做法。你应该在退货之前自动退货。不要依赖别人知道释放它。