內存管理如何工作一個UIImage被重新分配給另一個圖像。重新分配內存處理
例如
someImage = image1.png
someImage = image2.png
image1.png在內存方面會發生什麼變化?重新分配會有泄漏嗎?
圖像將從文檔目錄加載。
內存管理如何工作一個UIImage被重新分配給另一個圖像。重新分配內存處理
例如
someImage = image1.png
someImage = image2.png
image1.png在內存方面會發生什麼變化?重新分配會有泄漏嗎?
圖像將從文檔目錄加載。
這取決於你如何加載圖像。就像其他任何對象一樣,如果你自己分配了& init,那麼你必須清理自己。否則,你可以依靠自動釋放的對象。
這不會泄漏:
UIImage* someImage;
someImage = [UIImage imageWithContentsOfFile:@"<path>/file1.png"];
// usage the image here ...
someImage = [UIImage imageWithContentsOfFile:@"<path>/file2.png"];
// use the image again ...
這將:
UIImage* someImage;
someImage = [[UIImage alloc] initWithContentsOfFile:@"<path>/file1.png"];
// usage the image here …
someImage = [[UIImage alloc] initWithContentsOfFile:@"<path>/file2.png"];
// use the image again ...
這真的仍這個簡單,只要你堅持使用Cocoa類 - 你可能並不需要更多地進入Carbon API。 :)
這取決於您如何分配圖像。
如果你這樣做
UIImage *someImage = [[UIImage alloc] initWithContentsOfFile:@"image1.png"];
...
someImage = [[UIImage alloc] initWithContentsOfFile:@"image2.png"];
將有內存泄漏,因爲你有過someImage
所有權和你不釋放它。
做一個正確的做法是:
UIImage *someImage = [[UIImage alloc] initWithContentsOfFile:@"image1.png"];
...
[someImage release];
someImage = [[UIImage alloc] initWithContentsOfFile:@"image2.png"];
...
[someImage release];
,也可以使用自動釋放的對象
UIImage *someImage = [[[UIImage alloc] initWithContentsOfFile:@"image1.png"] autorelease];
...
someImage = [[[UIImage alloc] initWithContentsOfFile:@"image2.png"] autorelease];
另一種方法是將@property與「retain」屬性集(與@synthesize一起使用)。不過,你需要「釋放」分配對象,當你爲它們分配:
@property (retain) UIImage *someImage;
...
@synthesize someImage;
...
self.someImage = givenImageg1;
...
self.someImage = givenImage2;
最後一行將發佈第一圖像集,然後再保留第二個。請注意,你必須使用「自我」。爲了確保你使用了這個魔法的setter方法,否則什麼都不會發生。
您提問的方式讓您很難理解您真正想知道的內容。這是代碼嗎?還是僞代碼?圖像不能分配給圖像。 – 2011-03-11 15:54:57