2011-02-14 63 views
0

因为我是很新,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]; 

这是否正确地释放一切?似乎工作没有记忆或崩溃的问题。非常感谢您的帮助。

+1

这使得该类更少重用。想象一下,你与朋友分享这些代码,他称之为动画方法,但不知道他必须稍后调用发布。现在他有内存泄漏,因为他信任你的代码遵循苹果公司在其[内存管理编程指南]中规定的约定(http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/ MemoryMgmt/MemoryMgmt.html)。 – Tobias 2011-02-14 22:16:34

回答

3

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

+0

这是否意味着如果我打电话给方法“newSomethingAnimation”(因为我想要一个新的动画),那会好吗? – SomaMan 2011-02-14 22:03:28

2

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