一半夷、設(shè)置器setter 訪問(wèn)器getter
setter:
set+首字母大寫(xiě)的實(shí)例變量名
如:- (void)setNickName:(NSString *) name;//參數(shù)名不要與實(shí)例變量名相同
getter:
與實(shí)例變量名相同(沒(méi)有短橫線)蛾狗,并且返回值類(lèi)型也一致
例:
@interface Cup:NSObject
{
float _price;
}
- (void)setPrice:(float)price;
- (float)price;
@end
二、屬性和實(shí)例變量的區(qū)別
1. ? oc中實(shí)例變量的訪問(wèn)方式
oc中成員變量有三種訪問(wèn)權(quán)限莫秆,@public,@protected,@private。默認(rèn)是@protected,再C++中默認(rèn)是private薄啥。
@public 直接使用‘->’
@private @protected都需要分別給出設(shè)置方法和訪問(wèn)方法
建議實(shí)例變量都加下劃線,與系統(tǒng)命名方式一致
2.property 屬性是一組設(shè)置器和訪問(wèn)器逛尚,需要聲明和實(shí)現(xiàn)
@property float price;
@synthesize price = _price;
(方法調(diào)試出錯(cuò)要會(huì)看 [receiver message])
3.屬性的屬性
屬性也可以設(shè)置屬性(attribute):只讀(readonly, ? 默認(rèn)是readwrite屬性垄惧,原子性屬性,setter語(yǔ)義屬性
(1)readonly 只讀
(2)給setter和getter方法起別名(setter = a:, getter = b)
atomic ?開(kāi)啟多線程變量保護(hù)绰寞,會(huì)消耗一定的資源(非原子性到逊,保證多線程安全)
nonatomic:禁止多線程變量保護(hù),提高性能
(3)setter語(yǔ)義屬性:
assign:直接賦值滤钱,適用于基本數(shù)據(jù)類(lèi)型(非對(duì)象類(lèi)型)
retain:賦值時(shí)做內(nèi)存優(yōu)化觉壶,使用于對(duì)象類(lèi)型
copy:復(fù)制一個(gè)副本,適用于特殊的對(duì)象類(lèi)型(有NSCoping協(xié)議的才可以用copy)
assign retain copy的setter方法的內(nèi)部實(shí)現(xiàn)(筆試題)
assign:
@property float price;
內(nèi)部實(shí)現(xiàn):
- (void)setPrice:(float)price
{
_price = price;
}
getter是:
- (float)price
{
return _price;
}
retain:
@property (retain, readwrite, nonatomic) NSString *company;
內(nèi)部實(shí)現(xiàn):
- (void)setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company retain];
_company = company;
}
}
copy:
@property (copy, readwrite, nonatomic) NSString *company;
內(nèi)部實(shí)現(xiàn):
- (void) setCompany:(NSString *)company{
if(_company != company){
[_company release];
[company copy];
_company = company;
}
}
三件缸、使用屬性和點(diǎn)語(yǔ)法
點(diǎn)語(yǔ)法(和[receriver message]是等價(jià)的)
1.性能有點(diǎn)差铜靶,內(nèi)部轉(zhuǎn)化為setter,getter
2.不易理解蘋(píng)果的調(diào)用機(jī)制
3.屬性
只要有setter(或getter)就可以使用點(diǎn)語(yǔ)法
四停团、封裝
封裝的好處:
使用起來(lái)更加簡(jiǎn)單
變量更加安全
可以隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié)
開(kāi)發(fā)速度加快