iOS開發筆記之三十九——一個@dynamic導致的crash問題

來源:互聯網
上載者:User

1、最近好好的工程代碼突然冒出一個crash的bug,A類的crash日誌如下:

2015-06-03 11:42:53.807 DPScope[86379:1639651] -[A setTitleCell:]: unrecognized selector sent to instance 0x7fd5fe7d04002015-06-03 11:42:53.815 DPScope[86379:1639651] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[A setTitleCell:]: unrecognized selector sent to instance 0x7fd5fe7d0400'*** First throw call stack:(0   CoreFoundation                      0x0000000112203c65 __exceptionPreprocess + 1651   libobjc.A.dylib                     0x0000000111e9abb7 objc_exception_throw + 452   CoreFoundation                      0x000000011220b0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 2053   CoreFoundation                      0x000000011216113c ___forwarding___ + 9884   CoreFoundation                      0x0000000112160cd8 _CF_forwarding_prep_0 + 120

crash日誌的大致意思就是找不到 setTitleCell這個方法;

而titleCell是A類的一個cell屬性,

@property (nonatomic,strong)TitleCell *titleCell;

後來發現,這個titleCell屬性在實現時,被人聲明為以下:

@implementation A@dynamic titleCell;

注釋掉這行代碼,就不會再crash。


2、@dynamic關鍵字與@synthesize關鍵字的用法

當一個@property的屬性被@synthesize修飾時,意味著如果你沒有手動實現屬性的setter方法和getter方法,那麼編譯器酒會自動為你產生它們;

當一個@property的屬性唄@dynamic修飾時,就意味著屬性的getter與setter方法需要由使用者自己實現,不會自動產生。如果你沒有手動提供setter或者getter方法,那麼編譯時間沒問題,但是在程式運行類似self.titleCell= [TitleCell new]或者TitleCell *cell = self.titleCell時,就會因為缺少setter方法和getter方法而crash。編譯沒問題,運行時才會執行相應的方法,就是所謂的動態綁定機制。

當然,如果你們沒有顯示聲明它們,預設就是@syntheszie方式;

3、參考連結

http://blog.csdn.net/haishu_zheng/article/details/12873151

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.