Xcode6編譯SDWebImage報錯原因分析(SDWebImageDownloaderOperation.m錯誤)

來源:互聯網
上載者:User

標籤:xcode6   sdwebimage   undeclared   sdwebimagedownloader   

之前寫了一片關於編譯SDWebImage報錯解決方案的文章:

http://blog.csdn.net/cuibo1123/article/details/39434015

結果很多人問這個問題的原因,那就在這裡給大家說一說好了,分析思路一併送上(不過我還是建議大家自己動手去分析)。

首先,如果建立工程,按照SDWebImage的方式聲明輸出口並引用:

  1. @interface ZCTest ()  
  2.     @property (assign, nonatomicgetter = isExecuting) BOOL executing;  
  3.     @property (assign, nonatomicgetter = isFinished) BOOL finished;  
  4. @end  
  5.   
  6. @implementation ZCTest  
  7. - (id)init  
  8. {  
  9.     if ((self = [super init]))  
  10.     {  
  11.         _executing = NO;  
  12.         _finished = NO;  
  13.     }  
  14.     return self;  
  15. }  
  16. @end  

這段代碼不會出現任何問題,並可以編譯正常。

那麼,為什麼同樣的代碼在SDWebImage裡卻有如下提示?

    Use of undeclared identifier ‘_executing‘;
    Use of undeclared identifier ‘_finished‘;


思路就是去找SDWebImage的SDWebImageDownloaderOperation類和自己的代碼有什麼不同。很容易發現,SDWebImageDownloaderOperation繼承的父類是NSOperation,那麼,把我們自己的測試代碼也繼承自NSOperation,你會發現測試代碼這時會報同樣的錯誤了。好了,原因定位在NSOperation,看看這個介面吧,開啟NSOperation.h,在聲明中會發現如下兩行:


    @property (readonly, getter=isExecuting) BOOL executing;

    @property (readonly, getter=isFinished) BOOL finished;


好了,問題就出在這裡。NSOperation裡聲明了兩個同名屬性,並且是readonly,所以在SDWebImageDownloaderOperation裡使用_executing = NO修改就會提示錯誤了,而在SDWebImageDownloaderOperation的擴充中使用assign優先順序是低於繼承的(猜測)。這就是問題的由來。


至於老版本的xcode為什麼不報錯,這可能要歸結到xcode本身了,或許老版本聲明readonly模式同樣會產生_executing,但是xcode6在readonly模式時最佳化掉了_executing變數,有興趣可以自行實驗或者看編譯過程檔案。這裡就不繼續解讀了。


原創內容,轉載請註明出處:http://blog.csdn.net/cuibo1123

^^


Xcode6編譯SDWebImage報錯原因分析(SDWebImageDownloaderOperation.m錯誤)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.