【原】iOS 同時重寫setter和getter時候報錯:Use of undeclared identifier '_name';did you mean 'name'

來源:互聯網
上載者:User

標籤:

 

寫了那麼多的代碼了,平時也沒有怎麼注意會報這個錯誤,因為平時都很少同時重寫setter和getter方法,一般的話,我們大概都是使用懶載入方法,然後重寫getter方法,做一個非空判斷。然後有時候根據需求,要同時重寫屬性的setter和getter方法。系統就會報錯誤::Use of undeclared identifier ‘_name‘;did you mean ‘name‘

 

MARK:如果不想瞭解太多,直接的解決方案:

在@implementation 實現中添加一行代碼就OK了

@synthesize wtName = _wtName;

 

 

詳解一下:

OC最初設定@property和@synthesize的作用:

@property的作用是定義屬性,聲明getter,setter方法。(注意:屬性不是變數)
@synthesize的作用是實現屬性的,如getter,setter方法.

在聲明屬性的情況下如果重寫setter,getter,方法,就需要把未識別的變數在@synthesize中定義,把屬性的存取方法作用於變數。如:

.h檔案中

後來因為使用@property灰常頻繁,就簡略了@synthesize的表達。

從Xcode4.4以後@property已經獨攬了@synthesize的功能主要有三個作用:

(1)產生了私人的帶底線的的成員變數因此子類不可以直接存取,但是可以通過get/set方法訪問。那麼如果想讓定義的成員變數讓子類直接存取那麼只能在.h檔案中定義成員    變數了,因為它預設是@protected
(2)產生了get/set方法的實現
當:
用@property聲明的成員屬性,相當於自動產生了setter getter方法,如果重寫了set和get方法,與@property聲明的成員屬性就不是一個成員屬性了,是另外一個執行個體變數,而這個執行個體變數需要手動聲明。所以會報錯誤。
總結:一定要分清屬性和變數的區別,不能混淆。@synthesize 聲明的屬性=變數。意思是,將屬性的setter,getter方法,作用於這個變數。

 

【原】iOS 同時重寫setter和getter時候報錯:Use of undeclared identifier '_name';did you mean 'name'

聯繫我們

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