簡體   English   中英

什么是將UIImage分配給內存並將其釋放到iphone的正確方法

[英]Whats the correct way to alloc a UIImage to memory and release it iphone

使用Instruments,我繼續使用UIImage指向內存泄漏。
我想我正在分配和釋放內存。 儀器中泄漏的物體被描述為NSConcreteData

以下是分配和釋放UIImage的正確方法嗎?

UIImage* flagimg = [UIImage imageWithData: [NSData dataWithContentsOfURL:url2]];    
[flagimg release];
flagimg =nil;

[UIImage imageWithData:]返回一個自動釋放的對象,不應該再次釋放它。 因此,這段代碼剪切不包含內存泄漏,但相反,雙重免費(在最壞的情況下)。

請注意,儀器有時會在基金會本身產生誤報和/或報告內存泄漏(是的,它們也會犯錯誤:-)。

分配/釋放對象的最快方法是避免使用便利初始化程序(如imageWithData :),而不是像

NSData* data = [[NSData alloc] initWithContentsOfURL:url]];
UIImage* img = [[UIImage alloc] initWithData:data];
[data release];
// use your image
[img release];

這將立即分配和釋放您的對象,而不是等到清理自動釋放池。

但是請注意,內存泄漏通常不是尚未釋放的內存,但是丟失並且不能再釋放 ,因此將被自動釋放池釋放的對象不被視為內存泄漏。

作為一般規則,你可以說

如果您創建一個對象,其中包含“init”,“copy”或“retain”,則必須將其釋放。 如果沒有,你得到一個自動釋放的對象。

這並非總是如此,但在大多數情況下

imageWithDatadataWithContentsOfURL返回自動釋放的對象,因此您應該在該代碼段中沒有內存泄漏。

由於flagimg是自動釋放的,你的[flagimg release]; 不需要打電話; 你過度釋放那個物體。

暫無
暫無

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

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