2013-10-08 53 views
1

我正在使用AFNetworking方法將我的圖像加載到UIBUtton中。我的目標是在加載後用淡入淡出的動畫顯示圖像。在從URL加載後淡入UIButton圖像

 [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 

我明白爲什麼我會收到上述警告並尋找解決方法。 感謝

回答

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 
}]; 

UPDATE:在你的代碼leftBtn分塊和塊點回leftBtn。這導致保留週期。在我的代碼leftBtn中指向該塊,但該塊指向weakLeftBtn,該塊用__weak限定符聲明,這意味着只要該活動處於活動狀態但沒有與其保持強有力的關係,就會正確指向leftBtn。所以在這種情況下,leftBtn「擁有」該塊,但該塊不「擁有」任何本地或實例變量。

一些值得閱讀關於這一主題:

+0

感謝。所以通過這樣做,我剛剛告訴編譯器,這個UIButton很脆弱,他沒有什麼可擔心的?另一個問題,除了上面的情況,我什麼時候使用__?謝謝 – Segev

+0

@Sha:我剛剛修改了我的答案。 –

+0

很棒的回答。再次感謝! – Segev