屬性的內(nèi)存管理經(jīng)常是讓人很頭疼的一件事蟀伸,尤其是很多人在面試時(shí)經(jīng)常會(huì)被問(wèn)到蚀同,下面我們來(lái)講講屬性的內(nèi)存管理缅刽。
MRC:
在MRC下啊掏,屬性的修飾詞有三個(gè),分別是assign
,retain
衰猛, copy
三者對(duì)應(yīng)不同的內(nèi)存管理方式迟蜜。
assign
assign:修飾基本數(shù)據(jù)類(lèi)型,例如int,float等啡省;他不會(huì)對(duì)基本數(shù)據(jù)類(lèi)型進(jìn)行內(nèi)存管理娜睛;
參考setter和getter方法:
-(void)setAge:(NSInteger)age
{
_age = age;
}
-(NSInteger)age
{
return _age;
}
retain
retain:修飾對(duì)象類(lèi)型,對(duì)屬性進(jìn)行內(nèi)存管理卦睹; 該屬性對(duì)象指向一個(gè)對(duì)象后畦戒,對(duì)應(yīng)對(duì)象的引用計(jì)數(shù)+1。
參考setter和getter方法:
-(void)setSex:(NSString *)sex
{
if (_sex != sex) {
//釋放舊對(duì)象
[_sex release];
//持有新對(duì)象
_sex = [sex retain];
}
}
-(NSString *)sex
{
return [[_sex retain] autorelease]; //持有再自動(dòng)釋放
}
copy
copy:修飾對(duì)象類(lèi)型, 對(duì)屬性進(jìn)行內(nèi)存管理. 該屬性對(duì)象指向一個(gè)對(duì)象后结序, 對(duì)應(yīng)對(duì)象的引用計(jì)數(shù)不會(huì)改變障斋。屬性對(duì)象會(huì)復(fù)制對(duì)應(yīng)對(duì)象的內(nèi)容并生成一個(gè)新的對(duì)象,然后屬性對(duì)象指向這個(gè)新的對(duì)象徐鹤。
參考setter和getter方法
-(void)setHobby:(NSString *)hobby
{
if (_hobby != hobby) {
//釋放原有對(duì)象
[_hobby release];
//復(fù)制新對(duì)象
_hobby = [hobby copy];
}
}
-(NSString *)hobby
{
return [[_hobby retain] autorelease];
}
注意:
利用copy
修飾的屬性被賦值后引用計(jì)數(shù)為1垃环, 屬性和對(duì)應(yīng)對(duì)象指向的不是同一塊內(nèi)存空間;
ARC:
在ARC下返敬,屬性的修飾詞有三個(gè)遂庄,分別是strong
,weak
, copy
三者對(duì)應(yīng)不同的內(nèi)存管理方式劲赠。
- strong:相當(dāng)于MRC下的
retian
, 一般叫做強(qiáng)引用涛目; - weak:修飾對(duì)象,但不對(duì)屬性進(jìn)行內(nèi)存管理凛澎, 屬性的引用計(jì)數(shù)不會(huì)改變泌绣,用于避免循環(huán)引用等問(wèn)題;注意不能修飾基本數(shù)據(jù)類(lèi)型预厌;
- copy:同MRC下的copy一樣
*歡迎大家踴躍評(píng)論阿迈,讓我們一起探討技術(shù)!轧叽!
如果覺(jué)得文章不錯(cuò)苗沧,請(qǐng)幫忙點(diǎn)擊文章下方的喜歡
!炭晒!
你的支持將是對(duì)我最好的鼓勵(lì), 謝謝4选!网严!