IPHONE:关于发布变量的问题

时间:2009-10-27 18:07:51

标签: iphone iphone-sdk-3.0

考虑这个伪代码:

// an image is initialized
UIImage *imagePX = [[UIImage alloc]initWithContentsOfFile:... bla bla

imagePX = [self rotateImage:imagePX]; //A
[self doStuff:imagePX]; //B

然后我有了rotateImage方法:

- (UIImage*) rotateImage:(UIImage*)source {
  ... rotate the image... draw on context...
  [source drawInRect... bla bla
  ...

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

我的问题是:imagePX从未发布过。当图像传递给方法RotateImage时,我想我可以简单地释放它,在命令[source drawInRect ...]上使用它之后,因为我会在方法上返回一个rotateImage,但是如果我这样做,程序会崩溃,因为变量imagePX应该存在,所以A行可以评估。

我的另一个问题是图像将在B上转发到另一个例程。那么,在不失去imagePX跟踪和泄漏的情况下,最好的方法是什么?

最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

无需分配UIImage实例。 imageWithContentsOfFile是一个静态方法,可以在类本身上调用。

由于imageWithContentsOfFile不包含术语allocnewcopy,因此不会保留返回的对象(按惯例),并且会在第一时间自动释放排出自动释放池。

相反,如果您遇到类似的情况,在尝试访问此对象时无法弄清楚为什么会收到EXC_BAD_ACCESS错误,则可能很快就会发布。在这些情况下,您需要在本课程范围内进行手动保留/释放。

答案 1 :(得分:1)

而不是

[[UIImage alloc]initWithContentsOfFile:... bla bla

使用

[UIImage imageWithContentsOfFile:...bla bla

后者将被自动释放。

答案 2 :(得分:0)

[UIImage imageNamed:@“”]怎么样?没有分配,不需要发布)