在Objective C中,何时使用alloc以及何时不使用

Dav*_*vid 7 objective-c

我很难搞清楚何时分配一个对象.我正在阅读Apress iPhone Dev for Beginners一书.有时它说使用:

UIImage *seven = [UIImage imageNamed:@"seven.png"];
Run Code Online (Sandbox Code Playgroud)

和其他时候,

UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];
Run Code Online (Sandbox Code Playgroud)

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

谢谢 - 绝对初学者.

Rüd*_*nke 9

initWithImage:是一个实例方法 - 必须将消息发送到特定对象.您可以使用创建此类对象实例alloc.

imageNamed:是一种类方法.它不需要发送到类的实例,因此您不需要分配对象.返回对象的这种方法通常会在"引擎盖下"分配和初始化一个对象.

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

顺便说一句,alloc只是一种类的方法NSObject.


Sev*_*yev 2

约定是,每当您调用 [Foo alloc] 时,您必须随后 [release] 生成的 Foo 对象。另一方面,如果该方法被称为 [fooWithBar] 或类似的方法,它将返回一个自动释放的对象,该对象将在当前系统调用的函数返回时自动释放。