我有一個應用程序在iPhone 4s上使用相機時會發出內存警告。我在使用它之前縮放圖像。瞭解NSAutoreleasePool
+ (UIImage*)simpleImageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
// Create a graphics image context
UIGraphicsBeginImageContext(newSize);
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
// Return the new image.
return newImage;
}
我讀了你應該從這裏http://wiresareobsolete.com/2010/08/uiimagepickercontroller/
所以我修改這樣的代碼使用NSAutoreleasePool:
+ (UIImage*)simpleImageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
//http://wiresareobsolete.com/2010/08/uiimagepickercontroller/
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Create a graphics image context
UIGraphicsBeginImageContext(newSize);
// Tell the old image to draw in this new context, with the desired
// new size
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Get the new image from the context
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
// End the context
UIGraphicsEndImageContext();
[newImage retain];
[pool release];
// Return the new image.
return newImage;
}
內存警告就走了。我沒有在單獨的線程中調用它。 這是什麼NSAutoreleasePool在做什麼?我只是不明白這一點。
我可以在本地保留一個對象嗎NSAutoreleasePool?
我可以在NSAutoreleasePool已發佈後使用保留的對象嗎?
重要的問題:怎樣的NSAutoreleasePool幫助我的應用程序的內存佔用這個特定的使用情況,以便它不會內存警告?那是你自己創建
現代形式是'@ autoreleasepool' ...一般情況下,當池被耗盡時會發生什麼情況,因爲具有零保留計數的自動釋放對象被釋放,所以當您耗盡池時,您會強制執行dealloc。顯式的'retain'應該會產生警告/錯誤... – stevesliva 2014-12-06 06:42:20
newImage的顯式保留不會導致警告/錯誤。 – 2014-12-06 06:52:32
你沒有使用ARC? – stevesliva 2014-12-06 07:06:33