[英]IPHONE: Question about releasing a variable
考慮以下偽代碼:
// 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 ...]上使用它之后將其釋放,就像我將在該方法上返回一個rotatedImage一樣,但是如果這樣做,該程序將崩潰,因為變量imagePX應該存在,所以行A可以求值。
我的另一個問題是圖像將在B上轉發到另一個例程。 因此,在不丟失imagePX和泄漏的情況下使其工作的最佳方法是什么?
最好的方法是什么?
無需分配UIImage的實例。 imageWithContentsOfFile
是一個靜態方法,可以在類本身上調用。
由於imageWithContentsOfFile
不包含alloc
, new
或copy
術語,因此不保留返回的對象(按照慣例),它們將在自動釋放池的第一個消耗區自動釋放。
相反,如果遇到類似的情況,當您無法弄清為什么在嘗試訪問該對象時會收到EXC_BAD_ACCESS錯誤,則它可能發布得太早了。 在這種情況下,您將需要在此類的范圍內進行手動保留/釋放。
代替
[[UIImage alloc]initWithContentsOfFile:... bla bla
采用
[UIImage imageWithContentsOfFile:...bla bla
后者將自動發布。
那[UIImage imageNamed:@“”]呢? 沒有分配,不需要釋放)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.