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)
我理解为什么我得到上述警告并寻找一种聪明的方法来解决它.谢谢
你应该使用类似的东西:
__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"拥有"块,但块不"拥有"任何本地或实例变量.
关于这个主题的一些有价值的读物: