首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在目标C中,何时使用alloc,何时不使用alloc

在目标C中,何时使用alloc,何时不使用alloc
EN

Stack Overflow用户
提问于 2011-05-07 06:00:29
回答 4查看 492关注 0票数 7

我很难弄清楚什么时候分配一个对象。我正在阅读初学者的Apress iPhone开发人员一书。有时它会说use:

代码语言:javascript
复制
UIImage *seven = [UIImage imageNamed:@"seven.png"];

还有一些时候,

代码语言:javascript
复制
UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];

为什么不在第一个示例中分配UIImage?

谢谢-绝对是初学者。

EN

回答 4

Stack Overflow用户

发布于 2011-05-07 06:17:03

initWithImage:是一个实例方法--消息必须发送到特定的对象。您可以使用alloc创建这样一个对象实例。

imageNamed:是一个类方法。它不需要被发送到类的实例,所以您不需要分配对象。这种返回对象的方法通常会“在幕后”分配和初始化一个对象。

您可以在类引用中找到哪些方法是类方法,哪些方法是实例方法。此外,类方法声明以+ (UIImage *)imageNamed:(NSString *)name中的+开头,实例方法以- (id)initWithData:(NSData *)data中的-开头。

顺便说一句,alloc只是NSObject的一个类方法。

票数 9
EN

Stack Overflow用户

发布于 2011-05-07 06:05:26

约定是,无论何时调用Foo alloc,都必须在之后释放产生的Foo对象。另一方面,如果该方法被称为fooWithBar或类似的方法,它将返回一个自动释放的对象,该对象将在当前系统调用的函数返回时自动释放。

票数 2
EN

Stack Overflow用户

发布于 2011-05-07 06:07:25

这在一开始可能会让人感到困惑。在上面的示例中,[UIImage imageNamed]方法是一个静态的方便方法,API的创建者认为它会很有帮助。在幕后,该方法将返回一个类型为UIImage自动释放的对象。

当你使用Cocoa Touch API时,你会对它们更加熟悉,使用函数等的便利性也会变得更加自然。

注意:在您上面概述的两种情况下,一种是自动释放的UIImage,另一种是当您想要放弃对象的所有权时必须专门释放的UIImageView (否则会出现内存泄漏)。

有关UIImage与UIImageView的一些信息,请查看此thread

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5917448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档