我正在使用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
我明白为什么我得到上述警告并寻找一种聪明的方法来解决它。 感谢
答案 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
“拥有”该块,但该块不“拥有”任何本地或实例变量。
关于这个主题的一些有价值的读物: