对象未初始化

时间:2011-07-02 23:40:31

标签: objective-c uiimage

在目标C中,我可以执行以下操作

UIImage *myImage = [UIImage imageNamed:@"myPhoto.jpg"];
variable.image = myImage;

这很好用。但是名为“myImage”的对象从未被初始化,并且UIImage从未分配任何内存,但代码仍然有效..

有人可以解释这里发生了什么吗?

2 个答案:

答案 0 :(得分:2)

是的,该对象已初始化。 imageNamed:方法分配并初始化对象,向其发送autorelease消息,然后将内存地址返回给您。您将该内存地址存储在名为myImage的指针中。

myImage,对象是两个不同的东西。 myImage仅指向内存位置。它不是对象本身。

您可以传递对象而不将它们分配给变量,并且可以将一个对象分配给许多变量。

考虑一下:

UIImage *imageOne;
UIImage *imageTwo;

imageOne = [UIImage imageNamed:@"myPhoto.jpg"];
imageTwo = imageOne;

未复制图像。现存只有一个对象。这两个变量都指向它。

现在考虑一下:

NSLog(@"%@", [UIImage imageNamed:@"myPhoto.jpg"]);

您没有将其分配给任何变量。但是这个对象仍然存在,对吗?

答案 1 :(得分:0)

查看UIImage +。在“缓存图像加载例程”和“创建新图像”标题下的一些方法-,您可能期望[[[UIImage alloc] init] autorelease];。这意味着调用这些方法与调用NSArray相同,尽管其中一些方法做得更多(如在自定义初始化中)。

许多其他Objective C对象具有类似的方法,例如,+(id)array有一个方法+,它创建并返回一个空数组。这里的主要指标是-而不是{{1}},但我总是检查文档以检查初始化的处理方式,并确保对象是自动释放的。