簡體   English   中英

IPHONE:有關釋放變量的問題

[英]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不包含allocnewcopy術語,因此不保留返回的對象(按照慣例),它們將在自動釋放池的第一個消耗區自動釋放。

相反,如果遇到類似的情況,當您無法弄清為什么在嘗試訪問該對象時會收到EXC_BAD_ACCESS錯誤,則它可能發布得太早了。 在這種情況下,您將需要在此類的范圍內進行手動保留/釋放。

代替

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

采用

[UIImage imageWithContentsOfFile:...bla bla

后者將自動發布。

那[UIImage imageNamed:@“”]呢? 沒有分配,不需要釋放)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM