ios 同時重寫setter和getter方法

2021-08-11 05:12:26 字數 1299 閱讀 8980

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

在@implementation 實現中新增一行**就ok了

詳解一下:

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方法,作用於這個變數。

setter和getter記憶體處理

person.m import person.h implementation person 析構函式 void dealloc 建構函式 id initwithname nsstring name score nsarray score return self void setname nsstr...

setter方法和getter方法

oc是一門物件導向的語言,物件導向的語言有三大特性,就是封裝性,繼承性和多型性.類的資料與功能的封裝,資料就是成員變數,功能就是類方法或者物件方法,對資料的封裝,也就是對成員變數的封裝,封裝就是把資料隱藏起來,只能用此類的方法才可以讀取或者設定資料,不可被外部任意修改是物件導向設計本質,降低了資料被...

getter 和 setter的運用

1 set 有且僅有乙個引數 2 get不允許有任何引數 var obj set有且僅有乙個引數 setc value 不允許有任何引數 getc setinterval function 16 如果僅有set,沒有get,這個屬性就是只寫屬性 如果僅有get,沒有set,這個屬性就是乙個唯讀屬性 ...