我很难弄清楚什么时候分配一个对象。我正在阅读初学者的Apress iPhone开发人员一书。有时它会说use:
UIImage *seven = [UIImage imageNamed:@"seven.png"];还有一些时候,
UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];为什么不在第一个示例中分配UIImage?
谢谢-绝对是初学者。
发布于 2011-05-07 06:17:03
initWithImage:是一个实例方法--消息必须发送到特定的对象。您可以使用alloc创建这样一个对象实例。
imageNamed:是一个类方法。它不需要被发送到类的实例,所以您不需要分配对象。这种返回对象的方法通常会“在幕后”分配和初始化一个对象。
您可以在类引用中找到哪些方法是类方法,哪些方法是实例方法。此外,类方法声明以+ (UIImage *)imageNamed:(NSString *)name中的+开头,实例方法以- (id)initWithData:(NSData *)data中的-开头。
顺便说一句,alloc只是NSObject的一个类方法。
发布于 2011-05-07 06:05:26
约定是,无论何时调用Foo alloc,都必须在之后释放产生的Foo对象。另一方面,如果该方法被称为fooWithBar或类似的方法,它将返回一个自动释放的对象,该对象将在当前系统调用的函数返回时自动释放。
发布于 2011-05-07 06:07:25
这在一开始可能会让人感到困惑。在上面的示例中,[UIImage imageNamed]方法是一个静态的方便方法,API的创建者认为它会很有帮助。在幕后,该方法将返回一个类型为UIImage的自动释放的对象。
当你使用Cocoa Touch API时,你会对它们更加熟悉,使用函数等的便利性也会变得更加自然。
注意:在您上面概述的两种情况下,一种是自动释放的UIImage,另一种是当您想要放弃对象的所有权时必须专门释放的UIImageView (否则会出现内存泄漏)。
有关UIImage与UIImageView的一些信息,请查看此thread。
https://stackoverflow.com/questions/5917448
复制相似问题