我有一個奇怪的問題。要求是從一個網址刷卡下載圖像,並在圖像視圖中顯示它。它工作得很好,但我收到30圖像後,並在幾次刷卡應用程序崩潰後的內存警告。下載圖像時iphone內存問題
實現非常簡單,但已經花了差不多2天時間才能找出問題所在。 在每個輕掃我打電話的方法: -
-(void)callDownloadImageAPI{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
[self loadIndicator:@"Please Wait.!!" :@"Please be patient while we are downloading image for you"];
@try{
DownloadImage *downLoadImge =[[DownloadImage alloc] init];
downLoadImge.delegate=self;
[downLoadImge getImage:[self.allUrlArray objectAtIndex:self.initialImageViewCounter]];
}
@catch (NSException *e) {
NSLog(@"callDownloadImageAPI exception %@",[e description]);
[HUD hide:YES];
}
[pool release];
}
此下載方式1,在一個實時圖像並傳送到的UIImage其委託
// DownloadImage.h的實施和.M
@protocol DownloadImageDelegate
@required
- (void)messageFormServerWithImage:(UIImage*)imageFromSever;
- (void)gettingImageFailed :(NSString*)errorDesc;
@end
@interface DownloadImage : NSObject
@property(strong) NSURLConnection* connection;
@property(weak) id<DownloadImageDelegate> delegate;
@property(strong) NSMutableData* data;
-(void)getImage:(NSString *)imageUrl;
//DownloadImage.m
NSUrlCo的-(void)getImage:(NSString *)imageUrl{
@autoreleasepool {
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
}
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
@autoreleasepool {
NSLog(@"connectionDidFinishLoading");
self.connection=nil;
if(self.data == nil) {
return;
}
// NSString* jsonStr = [[NSString alloc] initWithData:self.data encoding:NSASCIIStringEncoding];
UIImage *img=[UIImage imageWithData:self.data];
// NSArray *messages_json = [parser objectWithString:jsonStr error:nil];
[self.delegate messageFormServerWithImage:img];
self.data = nil;
img= nil;
}
}
其他代表nnections實現,但我不把它放在這裏。 一旦這個圖像被返回,我將此圖像設置爲滾動視圖並顯示它並從滾動視圖中刪除以前的圖像。
更多信息: -
只是爲了驗證我註釋掉設置圖像滾動型和剛剛下載的每一個刷卡的圖像,但它仍然崩潰各地30幅
令人驚訝的,我使用同一個類DownloadImage。 h和.m在同一工作中的其他地方下載圖像,即使使用500images也可以工作。
我在iPod Touch上測試和我檢查所使用的內存保持12-14mb之間(不可超過本)
請幫我傢伙,讓我知道,如果你需要更多的細節。
你存儲的圖像?或只是在用戶刷卡時顯示它們?如果是第二個,請查看asyncImageView,它是一個ImageView替代品,可以異步顯示圖像並在需要時緩存它們。 – jcesarmobile 2013-03-08 09:00:18
如果您使用ARC,則不應使用NSAutoReleasePool。而是使用@autoreleasepool。 – occulus 2013-03-08 09:02:19
欲瞭解更多信息,請參閱http://stackoverflow.com/questions/9086913/objective-c-why-is-autorelease-autoreleasepool-still-needed-with-arc – occulus 2013-03-08 09:02:44