IPHONE:关于释放变量的问题
考虑以下伪代码:IPHONE:关于释放变量的问题,iphone,iphone-sdk-3.0,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 { ... rot
// 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和泄漏的情况下,让它工作的最佳方法是什么
最好的方法是什么?而不是
[[UIImage alloc]initWithContentsOfFile:... bla bla
使用
后者将自动释放。而不是
[[UIImage alloc]initWithContentsOfFile:... bla bla
使用
后者将自动释放。关于[UIImage ImageName:@”“]的情况如何?无需分配,无需发布)关于[UIImage ImageName:@”“]的情况如何?无需分配,无需释放)无需分配UIImage的实例
imageWithContentsOfFile
是一个静态方法,可以在类本身上调用
由于imageWithContentsOfFile
不包括术语alloc
、new
或copy
,因此返回的对象(按照约定)不会保留,并将在自动释放池的第一个排水口自动释放
相反,如果您遇到过类似的情况,在尝试访问此对象时,您无法弄清楚为什么会收到EXC_BAD_访问错误,那么它很可能很快就被释放了。在这些情况下,您需要在此类的范围内执行手动保留/释放。无需分配UIImage的实例
imageWithContentsOfFile
是一个静态方法,可以在类本身上调用
由于imageWithContentsOfFile
不包括术语alloc
、new
或copy
,因此返回的对象(按照约定)不会保留,并将在自动释放池的第一个排水口自动释放
相反,如果您遇到过类似的情况,在尝试访问此对象时,您无法弄清楚为什么会收到EXC_BAD_访问错误,那么它很可能很快就被释放了。在这些情况下,您将需要在此类的范围内执行手动保留/释放。当然!我确实忘了带文件内容的图像!我正在考虑我使用的那个和[UIImage ImageName…]但是最后一个使用我试图保存的内存缓存图像,因为我试图将我的应用程序置于内存节食模式。谢谢当然我确实忘了带文件内容的图像!我正在考虑我使用的那个和[UIImage ImageName…]但是最后一个使用我试图保存的内存缓存图像,因为我试图将我的应用程序置于内存节食模式。谢谢