@property

1.@property說明

@property聲明屬性的語法狸吞,可以生成變量存儲器勉耀。

存儲器:指用于設(shè)置變量和獲取變量的方法,setter用于設(shè)置變量存儲器蹋偏,getter用于獲取變量存儲器

@property有兩個對應(yīng)的詞便斥,@synthesize和@dynamic,如果@synthesize和@dynamic都沒有寫威始,則默認的為@synthesize ?var =_var;

@synthesize的語義是枢纠,如果你沒有實現(xiàn)setter和getter方法,那么編譯器會自動加上黎棠,

@dynamic的語義是晋渺,告訴編譯器不要實現(xiàn)setter和getter方法。

2.權(quán)限說明:

在.h中聲明脓斩,默認為權(quán)限為protected

在.m中聲明木西,默認為權(quán)限為private

3.@synthesize和@dynamic

@property等同于在.h中聲明實例變量的get/set方法,

@synthesize

@synthesize等同于在.m中實現(xiàn)了實例變量的get/set方法俭厚。

如果我們希望使用默認的實例變量命名方式户魏,則不需要再.m中聲明@synthesize,

如果我們希望使用自己的實例變量命名方式挪挤,則在.m中聲明@synthesize叼丑。

例如:

@synthesize name = myName;//后續(xù)中使用myName;

NSString *strTMp = myName;//使用myName;

@synthesize appID;//隱式生成getter和setter方法,

@property (retain,getter = getAppID) NSString *appID;//改變getter訪問名稱

@property(setter = setMyValue: ,getter= getMyValue) NSString *value; //改變屬性的setter和getter訪問名稱

[firstVC mySetValue:123];//使用setMyValue設(shè)置value扛门;

[firstVC myGeValue];//使用getMyValue獲取value;

@dynamic

@dynamic告訴編譯器鸠信,setter和getter方法用戶自己實現(xiàn)(如果是readonly,則是getter方法)论寨,假如聲明為@dynamic strDynamic;然后沒有提供setter方法和getter方法星立,那么以下情況都會在運行時崩潰

firstVC.strDynamic = @"123";//[FirstModeViewController setStrDynamic:]: unrecognized selector sent to instance 0x7fd1b3f06cd0'

[firstVC setStrDynamic:@"123"];//[FirstModeViewController setStrDynamic:]: unrecognized selector sent to instance 0x7fca5bf16520'

NSString *str = firstVC.strDynamic;//[FirstModeViewController strDynamic]: unrecognized selector sent to instance

編譯沒有問題爽茴,但運行時才執(zhí)行相應(yīng)的方法,叫做動態(tài)綁定

4.@property后面有哪些修飾符绰垂?

線程安全的:

nonatomic室奏,atomic;//默認為nonatomic

nonatomic不保證線程安全,禁止多線程劲装,變量保護胧沫,提高性能。

atomic是線程保護技術(shù)占业,防止在寫未完成的時候被另外一個線程訪問绒怨,造成數(shù)據(jù)錯誤,編譯器會自動加上互斥鎖代碼谦疾,避免變量讀寫不同步問題南蹂。

atomic示例代碼:

{lock}

? ? ?if(property ?!= newValue){

? ? ? ?[property release];

? ? ? ?property = [newValue retain];

? ? ? }

{unlock}

訪問權(quán)限:

readonly ;//只讀屬性,只會生成getter方法念恍,不希望屬性在類外改變

readwrite六剥;//可讀可寫屬性,會生成getter和setter方法峰伙,默認屬性

內(nèi)存管理(ARC)

assgin仗考,weak,strong词爬,copy

assgin是賦值特性秃嗜,setter方法將傳入?yún)?shù)賦值給變量,引用計數(shù)不變顿膨,對基礎(chǔ)數(shù)據(jù)類锅锨,

weak,在setter方法中恋沃,不進行引用計數(shù)加1操作必搞,對傳入的對象沒有所有權(quán),當(dāng)引用計數(shù)為0 時囊咏,對象釋放后恕洲,weak聲明的變量指向nil。作用和assgin相似梅割,不過當(dāng)引用計數(shù)為0 時霜第,自動置為nil。

delegate和Outlet一般用weak聲明户辞。

strong:iOS在ARC中引入的泌类,表示實例變量對傳入的變量要有所有權(quán)關(guān)系,即強引用底燎,

copy 建立一個索引為1的對象刃榨,釋放舊對象弹砚,NSString,與strong類似,實例變量傳入的是副本擁有所有權(quán)枢希,而非對象本身蝌诡,copy 其實是建立了一個相同的對象疟游,而 retain 不是

內(nèi)存管理(MRC)

assgin斋配,retain厨钻,copy

assign就是直接賦值

retain: 在setter方法中憔儿,需要對傳入的對象進行引用計數(shù)加1的操作畏邢,setter 方法對參數(shù)進行 release 舊值再 retain 新值分预,例如申請了一塊內(nèi)存地址為a趴梢,然后把這塊內(nèi)存共享給了b敬察,當(dāng)a不在使用這塊內(nèi)存地址時秀睛,它只需要計數(shù)減一,如果b不在使用這塊內(nèi)存地址時莲祸,計數(shù)減1蹂安,如果計數(shù)為0 ,則釋放這塊內(nèi)存

retain是指針copy锐帜,指向同一地址田盈,計數(shù)加1,而copy是把內(nèi)容復(fù)制過來

-(void)setName:(NSString*)_name{

//首先判斷是否與舊對象一致缴阎,如果不一致進行賦值允瞧。

//因為如果是一個對象的話,進行if內(nèi)的代碼會造成一個極端的情況:當(dāng)此name的retain為1時蛮拔,使此次的set操作讓實例name提前釋放述暂,而達不到賦值目的。

if( name != _name){

[name release];

name = [_name retain];

}

}

weak和strong的區(qū)別:weak和strong不同的是 當(dāng)一個對象不再有strong類型的指針指向它的時候 它會被釋放? 建炫,即使還有weak型指針指向它畦韭。一旦最后一個strong型指針離去 ,這個對象將被釋放肛跌,所有剩余的weak型指針都將被清除艺配。

copy與retain:

copy其實是建立了一個相同的對象,而retain不是.

copy是內(nèi)容拷貝衍慎,retain是指針拷貝.

copy是內(nèi)容的拷貝 ,對于像NSString,的確是這樣转唉,如果拷貝的是NSArray這時只是copy了指向array中相對應(yīng)元素的指針.這便是所謂的"淺復(fù)制".

block的屬性一般使用copy

指定方法名稱

setter=

getter=

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稳捆,隨后出現(xiàn)的幾起案子酝掩,更是在濱河造成了極大的恐慌,老刑警劉巖眷柔,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件期虾,死亡現(xiàn)場離奇詭異原朝,居然都是意外死亡,警方通過查閱死者的電腦和手機镶苞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門喳坠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茂蚓,你說我怎么就攤上這事壕鹉。” “怎么了聋涨?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵晾浴,是天一觀的道長。 經(jīng)常有香客問我牍白,道長脊凰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任茂腥,我火速辦了婚禮狸涌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘最岗。我一直安慰自己帕胆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布般渡。 她就那樣靜靜地躺著懒豹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驯用。 梳的紋絲不亂的頭發(fā)上歼捐,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音晨汹,去河邊找鬼豹储。 笑死,一個胖子當(dāng)著我的面吹牛淘这,可吹牛的內(nèi)容都是我干的剥扣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铝穷,長吁一口氣:“原來是場噩夢啊……” “哼钠怯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起曙聂,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤晦炊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體断国,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡贤姆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稳衬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霞捡。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖薄疚,靈堂內(nèi)的尸體忽然破棺而出碧信,到底是詐尸還是另有隱情,我是刑警寧澤街夭,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布砰碴,位于F島的核電站,受9級特大地震影響板丽,放射性物質(zhì)發(fā)生泄漏呈枉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一檐什、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弱卡,春花似錦乃正、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凡人,卻和暖如春名党,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挠轴。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工传睹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岸晦。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓欧啤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親启上。 傳聞我的和親對象是個殘疾皇子邢隧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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