2013-09-25 153 views
1

我正在寫一個圖片庫,其中可以通過url加載的圖片AFNetworking通過AFNetworking保留週期

ImageView對象的方法我調用一個函數發送一個請求。在這裏:

- (void) loadWithUrl:(NSURL *)url 
{ 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:TimeOut]; 
    [request setHTTPShouldHandleCookies:NO]; 
    [request setHTTPShouldUsePipelining:YES]; 

    __weak AOWImageView *safeSelf = self; 

    m_operation = [AFImageRequestOperation imageRequestOperationWithRequest:request 
                 imageProcessingBlock:nil 
                    success:^ 
        (NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
        { 
         [safeSelf setImage:image]; 
        } 
                    failure:^ 
        (NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) 
        { 
         [safeSelf setNoImageLabelOpaque]; 
        }]; 

    [m_operation start]; 
} 

如果ImageView是屏幕- (void) dealloc的可見部分之外被調用。我用這種方法取消操作加載鏡像:[m_operation cancel];。我猜這些操作並沒有被取消,因爲內存在增加並且沒有被釋放。

enter image description here

我認爲有保留週期。我想了解如何正確書寫它。謝謝。

+0

那麼m_operation是這個類的一個屬性呢? –

+0

這是'ImageView'的私人領域。 'AFImageRequestOperation * m_operation;' – Sauvage

+0

你看起來有多少內存泄漏?幾千字節或幾MB? –

回答

3

我沒有看到一個代碼因您的應用程序的代碼,另一部分保留週期段,您發佈的,因此,如果您正在泄漏內存,它可能是......

關於「最佳做法」 AFNetworking和加載圖像-

AFNetworkingUIImageView有一個內置類別,它具有通過URL設置圖像視圖圖像的便捷方法。

參見UIImageView+AFNetworking,特別是setImageWithURL:方法和相關。這也有保持緩存的優勢(所以如果多次請求,您不必再次獲取圖像),這看起來不是AFImageRequestOperation完成的。

+0

感謝您的幫助。我試圖使用該類別,但沒有效果。現在,內存很小的UIImage對象仍然存在並且不會被釋放。我會在另一部分代碼中找到。 – Sauvage