使用AFNetworking保留周期

时间:2013-09-25 12:16:06

标签: ios afnetworking retain-cycle

我正在编写一个图片库,可以通过网址加载AFNetworking

Init对象的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

我认为有保留周期。我想了解如何写得正确。感谢。

1 个答案:

答案 0 :(得分:3)

我在您发布的代码段中没有看到保留周期,因此如果您泄漏内存,可能是应用程序代码的另一部分...

关于AFNetworking的“最佳做法”并加载图片 -

AFNetworkingUIImageView上有一个内置类别,其中包含通过网址设置图像视图图像的便捷方法。

请参阅UIImageView+AFNetworking,特别是setImageWithURL:方法和相关内容。这也有保留缓存的优势(因此,如果多次请求,您不必再次获取图像),而AFAIK似乎并未由AFImageRequestOperation完成。