在簡書看到大牛的知識點,發(fā)現(xiàn)很多知識點自己一知半解,能做項目但理論不夠扎實,默默地去百度總結(jié)一下.放到這里和大家交流交流.
如有侵權(quán),告知即刪!
01.實現(xiàn)description方法能取到什么效果塘砸?
description基本概念
1.NSLog(@"%@", objectA);這會自動調(diào)用objectA的description方法來輸出ObjectA的描述信息.
2.description方法默認返回對象的描述信息(默認實現(xiàn)是返回類名和對象的內(nèi)存地址)
3.description方法是基類NSObject 所帶的方法,因為其默認實現(xiàn)是返回類名和對象的內(nèi)存地址, 這樣的話,使用NSLog輸出OC對象,意義就不是很大,因為我們并不關(guān)心對象的內(nèi)存地址,比較關(guān)心的是對象內(nèi)部的一些成變量的值花沉。因此,會經(jīng)常重寫description方法,覆蓋description方法 的默認實現(xiàn)
description重寫的方法
/*對象方法:當使用NSLog輸出該類的實例對象的時候調(diào)用/
-(NSString *) description
{
return [NSString stringWithFormat:@"狗腿數(shù):%d,狗眼數(shù)%d\n",_legNum, _eyeNum];
}
/**類方法:當使用NSLog輸出該類的類對象的時候調(diào)用*/
+(NSString *) description
{
return @"+開頭的description方法";
}
description陷阱
1.千萬不要在description方法中同時使用%@和self,下面的寫法是錯誤的
- (NSString *)description {
return [NSString stringWithFormat:@"%@", self];
}
2.同時使用了%@和self,代表要調(diào)用self的description方法,因此最終會導致程序陷入死循環(huán),循 環(huán)調(diào)用description方法
3.當[NSString stringWithFormat:@“%@”, self]; 使用它時,循壞調(diào)用茵瘾,導致系統(tǒng)會發(fā)生運行時錯誤箱熬。
4.當該方法使用NSLog(“%@”,self) 時候, 系統(tǒng)做了相關(guān)的優(yōu)化央串,循壞調(diào)用3次后就會自動退出
02.objc使用什么機制管理對象內(nèi)存举反?
Objective-C內(nèi)存管理機制
1.Objective-C中所有對象都在堆區(qū)建立仗谆,由程序員負責釋放對象所占用的內(nèi)存。內(nèi)存管理機制由3種:垃圾回收淑履、引用計數(shù)隶垮、C語言方式。
2.垃圾回收是Mac OS10.5提供的新方案秘噪,在系統(tǒng)存在一個垃圾收集器狸吞。如果發(fā)現(xiàn)某個對象沒有被任何對象使用,該對象被自動釋放缆娃。
3.C語言方式捷绒,原始內(nèi)存管理方式瑰排。用戶手動調(diào)用malloc贯要、calloc函數(shù)分配內(nèi)存,free回收內(nèi)存椭住。
4.引用計數(shù)機制:對象創(chuàng)建后崇渗,運行時系統(tǒng)通過對象維護的一個計數(shù)器來描述有多少個其他對象在使用自己,當計數(shù)器為0時京郑,釋放該對象占用的內(nèi)存空間(該對象調(diào)用dealloc方法)宅广。
5,內(nèi)存管理規(guī)則:當使用alloc,new或copy創(chuàng)建一個對象時些举,對象的引用計數(shù)被設置為1.跟狱;向?qū)ο蟀l(fā)送retain消息,對象引用計數(shù)加1户魏;向?qū)ο蟀l(fā)送release消息時驶臊,對象引用計數(shù)減1;當對象引用計數(shù)為0時叼丑,運行時系統(tǒng)向?qū)ο蟀l(fā)送dealloc消息并回收對象所占用的內(nèi)存关翎。
6.注意:如果類的實例變量時對象指針,則必須重載dealloc方法(例如圓circle類:有一個變量point是Point*類型)鸠信;dealloc方法不能直接調(diào)用纵寝,只有對象的引用計數(shù)為0的時候,系統(tǒng)會自動向?qū)ο蟀l(fā)送dealloc消息星立。