iOS 同時(shí)重寫setter和getter時(shí)候報(bào)錯(cuò):Use of undeclared identifier '_name';did you mean 'name'

寫了那么多的代碼了,平時(shí)也沒有怎么注意會報(bào)這個(gè)錯(cuò)誤,因?yàn)槠綍r(shí)都很少同時(shí)重寫setter和getter方法,一般的話,我們大概都是使用懶加載方法,然后重寫getter方法,做一個(gè)非空判斷。然后有時(shí)候根據(jù)需求,要同時(shí)重寫屬性的setter和getter方法。系統(tǒng)就會報(bào)錯(cuò)誤::Use of undeclared identifier '_name';did you mean 'name'


MARK:如果不想了解太多,直接的解決方法:

在@implementation 實(shí)現(xiàn)中添加一行代碼就OK了

@synthesize wtName = _wtName;


詳解一下:

OC最初設(shè)定@property和@synthesize的作用:

@property的作用是定義屬性,聲明getter,setter方法。(注意:屬性不是變量)

@synthesize的作用是實(shí)現(xiàn)屬性的,如getter,setter方法.

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

.h文件中

后來因?yàn)槭褂聾property灰常頻繁,就簡略了@synthesize的表達(dá)。

從Xcode4.4以后@property已經(jīng)獨(dú)攬了@synthesize的功能主要有三個(gè)作用:

(1)生成了私有的帶下劃線的的成員變量因此子類不可以直接訪問,但是可以通過get/set方法訪問。那么如果想讓定義的成員變量讓子類直接訪問那么只能在.h文件中定義成員    變量了,因?yàn)樗J(rèn)是@protected

(2)生成了get/set方法的實(shí)現(xiàn)

當(dāng):

用@property聲明的成員屬性,相當(dāng)于自動生成了setter getter方法,如果重寫了set和get方法,與@property聲明的成員屬性就不是一個(gè)成員屬性了,是另外一個(gè)實(shí)例變量,而這個(gè)實(shí)例變量需要手動聲明。所以會報(bào)錯(cuò)誤。

總結(jié):一定要分清屬性和變量的區(qū)別,不能混淆。@synthesize 聲明的屬性=變量。意思是,將屬性的setter,getter方法,作用于這個(gè)變量。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容