1

我正在编写一个包含图像的画廊,这些图像可以通过 url 加载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];. 我猜这些操作不会被取消,因为内存正在增加并且没有被释放。

在此处输入图像描述

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

4

1 回答 1

3

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

关于AFNetworking和加载图像的“最佳实践”-

AFNetworking 有一个内置类别,UIImageView它具有通过 URL 设置图像视图图像的便捷方法。

UIImageView+AFNetworking,具体setImageWithURL:方法和相关。这还具有保留缓存的优点(因此,如果多次请求,您不必再次获取图像),AFAIK 似乎没有完成AFImageRequestOperation

于 2013-09-25T13:01:42.397 回答