理解屬性概念

在很久很久以前iOS是木有@property滴羽莺,我們必須自己定義實例變量和存取方法

@interface User : NSObject
{
    NSString *name ;
    NSInteger age;
}

@end


#import "User.h"

@interface User()

@end

@implementation User

-(void)setName:(NSString *)_name{
    self->name = [_name copy];
}
-(NSString *)getName{
    return self->name;
}

@end

屬性@property給我們帶來了什么?

@property = ivar + getter + setter; PS : 實例變量 = 成員變量 = ivar

@property 會根據(jù)(特質(zhì))的類型自定義合成不同的存取方法,這個過程由編譯 器在編譯期執(zhí)行浓恳。
編譯器還要自動向類中添加適當類型的實例變量,并且在屬性名前面加下劃線,以此作為實例變量的名字

屬性可以擁有的特質(zhì)分為四類:
原子性---nonatomic
讀/寫權限---readwrite(讀寫) readonly (只讀)
內(nèi)存管理語義---assign尖淘、strong、weak著觉、unsafe_unretained村生、copy
方法名---getter=<name>、setter=<name>
@property (nonatomic, getter=isOn) BOOL on;

@synthesize

@synthesize 根據(jù)(特質(zhì))去添加存取方法 饼丘!
(如果沒有指定@synthesize 趁桃, 會為屬性自動添加 @synthesize propertyName = _propertyName)
_propertyName就是實例變量的名稱,propertyName是屬性名稱肄鸽。
意味著使用屬性可以通過存取方法去訪問_propertyName實例變量卫病。
直接訪問實例變量不會調(diào)用屬性的存取方法

@dynamic不會為屬性自動創(chuàng)立合成方法,也不會自動添加屬性典徘。


#import <Foundation/Foundation.h>

@interface User : NSObject
@property (nonatomic,copy) NSString *subName;
@property (nonatomic,copy) NSString *name;
@end

#import "User.h"

@interface User()

@end

@implementation User

@synthesize subName = _subName;
@dynamic name  ;

-(void)setName:(NSString *)name{
      self.subName = [_subName stringByAppendingString:name];
}


@end


@dynamic 就是要告訴編譯器蟀苛,代碼中用@dynamic修飾的屬性,其getter和setter方法會在程序運行的時候或者用其他方式動態(tài)綁定逮诲,以便讓編譯器通過編譯帜平。其主要的作用就是用在NSManagerObject對象的屬性聲明上,由于此類對象的屬性一般是從Core Data的屬性中生成的梅鹦,core data 框架會在程序運行的時候為此類屬性生成getter和setter方法裆甩。

總結(jié)一下:

當你想手動管理 @property 的所有內(nèi)容時,你就會嘗試通過實現(xiàn) @property 的所有“存取方法”(the accessor methods)或者使用 @dynamic 來達到這個目的齐唆,這時編譯器就會認為你打算手動管理 @property嗤栓,于是編譯器就禁用了 autosynthesis(自動合成)。

因為有了 autosynthesis(自動合成)蝶念,大部分開發(fā)者已經(jīng)習慣不去手動定義ivar抛腕,而是依賴于 autosynthesis(自動合成)芋绸,但是一旦你需要使用ivar,而 autosynthesis(自動合成)又失效了担敌,如果不去手動定義ivar摔敛,那么你就得借助 @synthesize 來手動合成 ivar。

當你同時重寫了 setter 和 getter 時全封,系統(tǒng)就不會生成 ivar(實例變量/成員變量)马昙。這時候有兩種選擇:
手動創(chuàng)建 ivar 或者使用@synthesize ; 關聯(lián) @property 與 ivar。

PS : effective Objective-C建議我們在對象內(nèi)部盡量直接訪問實例變量而不是用存取方法刹悴。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末行楞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子土匀,更是在濱河造成了極大的恐慌子房,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件就轧,死亡現(xiàn)場離奇詭異证杭,居然都是意外死亡,警方通過查閱死者的電腦和手機妒御,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門解愤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乎莉,你說我怎么就攤上這事送讲。” “怎么了惋啃?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵哼鬓,是天一觀的道長。 經(jīng)常有香客問我肥橙,道長魄宏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任存筏,我火速辦了婚禮宠互,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘椭坚。我一直安慰自己予跌,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布善茎。 她就那樣靜靜地躺著券册,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烁焙,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天航邢,我揣著相機與錄音,去河邊找鬼骄蝇。 笑死膳殷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的九火。 我是一名探鬼主播赚窃,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼岔激!你這毒婦竟也來了勒极?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤虑鼎,失蹤者是張志新(化名)和其女友劉穎辱匿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體震叙,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掀鹅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了媒楼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡戚丸,死狀恐怖划址,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情限府,我是刑警寧澤夺颤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站胁勺,受9級特大地震影響世澜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜署穗,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一寥裂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧案疲,春花似錦封恰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春低飒,著一層夾襖步出監(jiān)牢的瞬間许昨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工褥赊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留车要,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓崭倘,卻偏偏與公主長得像翼岁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子司光,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容