从URL加载后淡入UIButton图像

Seg*_*gev 1 objective-c ios 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
Run Code Online (Sandbox Code Playgroud)

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

Are*_*lko 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
}];
Run Code Online (Sandbox Code Playgroud)

更新:在您的代码中leftBtn指向一个块,块指向返回leftBtn.这导致保留周期.在我的代码中leftBtn指向块,但是块指向weakLeftBtn,使用__weak限定符声明,这意味着它将正确指向它leftBtn,只要它存活而不与它保持强关系.所以在这种情况下leftBtn"拥有"块,但块不"拥有"任何本地或实例变量.

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