2013-02-11 63 views
1

獲取的圖像時,我有我的iOS應用獲取一張圖像的時間越來越多,並顯示在屏幕(非常像幻燈片)上。我遇到低內存的情況。在運行Allocations時查看儀器,我發現內存在不斷增長。調用樹顯示正在使用大量的內存,但沒有一行是我的代碼,我不是在調試這些情況下,知道如何讀它足夠的經驗。內存與AFNetworking

Call Tree from Instruments

下面是我與獲取圖像的代碼:

- (void)fetchLargeImage:(void (^)(UIImage *))completion 
{ 

    // image doesn't exist yet, fetch it now 
    NSURL *resourceURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://path_to_image/%@", @"image_name.jpg"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:resourceURL]; 

    AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) { 
     return image; 
    } success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { 

     completion(image); 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { 
     // image wasn't loaded 
    }]; 

    [operation start]; 

} 

由於圖像顯示,我保存最後10幅圖像,因爲用戶可以刷卡向後回顧前面所示圖片。在我的清理方法中,我NIL出在圖像視圖和ImageView的自身的圖像,並且從該陣列中刪除。所以我不確定還有什麼能夠保持它,並導致內存繼續增長。我在這裏錯過了什麼?

回答

1

AFNetworking的類別的UIImageView方法靜靜存儲它們在共享AFImageCache對象,這是NSCache的一個子類中檢索圖像。這在性能方面非常出色,但我想它可能會導致您的內存問題。你會看到這條線是每個成功的AFImageRequestOperation後叫:好像

[[[self class] af_sharedImageCache] cacheImage:responseObject forRequest:urlRequest]; 

類別方法不超過該提供多大的控制,據我可以告訴。如果你覺得舒服編輯在的UIImageView + AFNetworking.m的代碼,你可以註釋掉上面的行,或者這行添加到af_sharedImageCache類方法來限制高速緩存的大小:

[_af_imageCache setCountLimit: 10]; // limits the number of cached images to 10 

我沒有使用儀器進行測試,所以我不能100%確定它會解決你的問題,但也許它有助於解釋發生了什麼。

+0

這聽起來很有前途,但我沒有看到任何效果運行的儀器。雖然謝謝! – Stephen 2013-02-12 05:23:21