在objective-c中昨凡,屬性的語義特性可以聲明為assign,retain和copy瓦阐,編譯器自動(dòng)幫我們生成了對(duì)應(yīng)的setter和getter方法吭从,如果將synthesize省略,并且我們自己實(shí)現(xiàn)setter和getter方法時(shí),系統(tǒng)就不會(huì)生成對(duì)應(yīng)的setter和getter方法,還有實(shí)例變量。下面的代碼展示了不同的語義特性聲明所對(duì)應(yīng)的setter和getter方法實(shí)現(xiàn)胞此。
1臣咖、當(dāng)把語義特性聲明為assign時(shí),setter和getter時(shí)方法內(nèi)部實(shí)現(xiàn)
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
2、當(dāng)把語義特性聲明為retain時(shí),setter和getter方法內(nèi)部實(shí)現(xiàn)
- (void)setName:(NSString *)name{
if (_name != name) {
[ _name release];
_name = [name retain];
}
}
- (NSString *)name{
return [[ _name retain] autorelease];
}
3,當(dāng)把語義特性聲明為copy時(shí),setter和getter方法內(nèi)部實(shí)現(xiàn)
- (void)setName:(NSString *)name{
if (_name != name) {
[ _name release];
_name = [name copy];
}
}
- (NSString *)name{
return [[ _name retain] autorelease];
}