从URL加载后淡入UIButton图像

时间:2013-10-08 08:30:03

标签: ios objective-c afnetworking

我正在使用AFNetworking方法将我的图像加载到UIBUttons中。我的目标是在加载后用淡入淡出的动画显示图像。

     [leftBtn setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:leftImageUrl]] placeholderImage:nil forState:UIControlStateNormal success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                 [UIView animateWithDuration:0.4 animations:^() {leftBtn.alpha = 1;}completion:^(BOOL finished){}];
            } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                //
            }];

Capturing 'leftBtn' strongly in this block is likely to lead to a retain cycle

我明白为什么我得到上述警告并寻找一种聪明的方法来解决它。 感谢

1 个答案:

答案 0 :(得分:5)

你应该使用类似的东西:

__weak UIButton *weakLeftBtn = leftBtn;
[leftBtn setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL      
                                               URLWithString:leftImageUrl]] 
               placeholderImage:nil 
                       forState:UIControlStateNormal 
                        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

                              [UIView animateWithDuration:0.4 animations:^() {

                                   weakLeftBtn.alpha = 1;

                              }completion:^(BOOL finished){}];
               } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
           // if something went wront
}];

更新:在您的代码中leftBtn指向一个区块,该区块指向leftBtn。这导致保留周期。在我的代码leftBtn中指向块,但块指向weakLeftBtn,使用__weak限定符声明,这意味着它将正确指向leftBtn因为它没有与它建立牢固的关系而活着。所以在这种情况下leftBtn“拥有”该块,但该块不“拥有”任何本地或实例变量。

关于这个主题的一些有价值的读物: