带有 UIActivityIndi​​catorView 参考内存的 UIImageView+AFNetworking 类别是不是保留?

Posted

技术标签:

【中文标题】带有 UIActivityIndi​​catorView 参考内存的 UIImageView+AFNetworking 类别是不是保留?【英文标题】:UIImageView+AFNetworking categories with UIActivityIndicatorView reference memory retain?带有 UIActivityIndi​​catorView 参考内存的 UIImageView+AFNetworking 类别是否保留? 【发布时间】:2014-08-13 15:55:00 【问题描述】:

我正在尝试实现一个类别,以显示来自 url 的 UIImageView 淡化和 UIActivityIndicatorView,我在网上找到了一些东西,并在这个最终版本中进行了编辑:

UIImageView+AFNetworkingLoad.m

@implementation UIImageView (AFNetworkingLoad)

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholderImage fadeInWithDuration:(CGFloat)duration withLoadIndicator:(UIActivityIndicatorView *)load_indicator 

    [load_indicator startAnimating];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPShouldHandleCookies:NO];
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

    __weak typeof (self) weakSelf = self;

    [self setImageWithURLRequest:request placeholderImage:placeholderImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
        [load_indicator stopAnimating];
        if (!request) // image was cached
            [weakSelf setImage:image];
        else
            [UIView transitionWithView:weakSelf duration:duration options:UIViewAnimationOptionTransitionCrossDissolve animations:^
                [weakSelf setImage:image];
             completion:nil];
     failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) 
        [load_indicator stopAnimating];
    ];

然后我以这种方式在自定义UITableViewCell 中使用它:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
...
[cell.img_view setImageWithURL:[NSURL URLWithString:my_url] placeholderImage:nil fadeInWithDuration:0.3 withLoadIndicator:cell.load_img];
...

一切正常,现在我的问题是,通过这个实现传递 UIActivityIndi​​catorView 的引用,我可以有一些内存泄漏吗?还是保留问题?显然我在我的 ios 项目中使用了 ARC...

【问题讨论】:

【参考方案1】:

此类别不应导致内存泄漏。该方法将对象传递到复制的块中,因此它将被该块临时保留,但是一旦图像加载或加载失败,应清除块,这将降低对象的保留计数。

【讨论】:

以上是关于带有 UIActivityIndi​​catorView 参考内存的 UIImageView+AFNetworking 类别是不是保留?的主要内容,如果未能解决你的问题,请参考以下文章

UIActivityIndi​​catorView 不工作(获取影响 UIActivityIndi​​catorView 的 Facebook 权限)

为啥我的 UIActivityIndi​​catorView 只显示一次?

UIActivityIndi​​catorView 正确使用

UIActivityIndi catorView未在webview中显示

UIButton里面的UIActivityIndi​​catorView

Swift UIPageViewController & UIActivityIndi​​catorView