1.category和extension的區(qū)別
- category:分類有名字咆疗,類擴展沒有分類名字,是一種特殊的分類
- extension:分類只能擴展方法(屬性僅僅是聲明赶掖,并沒真正實現(xiàn)),類擴展可擴展屬性、成員變量和方法盾致。
2.define和const常量有什么區(qū)別?
- define在預處理階段進行替換荣暮,const常量在編譯階段使用
- 宏不做類型檢查庭惜,僅僅進行替換,const常量有數(shù)據(jù)類型穗酥,會執(zhí)行類型檢查
- define不能調(diào)試护赊,const常量可以調(diào)試
- define定義的常量在替換后進行過程中會不斷用內(nèi)存,而const定義的常量存儲在數(shù)據(jù)段只有一份copy砾跃,效率更高
- define可以定義一些簡單的函數(shù)骏啰,const不可以
3.block和weak修飾符的區(qū)別?
- __block不管是ARC還是MRC模式下都可以使用抽高,可以修飾對象判耕,也可以修飾基本數(shù)據(jù)類型
- __weak只能在ARC模式下使用,只能修飾對象(NSString)翘骂,不能修飾基本數(shù)據(jù)類型
- block修飾的對象可以在block中被重新賦值壁熄,weak修飾的對象不可以
4.static關鍵字的左右
- 函數(shù)(方法)體內(nèi)static變量的作用范圍為該函數(shù)體,該變量的內(nèi)存只被分配一次碳竟,因此其值在下次調(diào)用時仍維持上次的值
- 在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問草丧,但不能被模塊外其它函數(shù)調(diào)用;
- 在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)莹桅,這個函數(shù)的使用范圍被限制在聲明它的模塊內(nèi)昌执;
- 在類中的static成員變量屬于整個類所擁有,對類的所有對象只有一份拷貝诈泼;
- 在類中的static成員函數(shù)所擁有懂拾,這個函數(shù)不接受this指針,因而只能訪問類的static成員變量
5.堆和棧的區(qū)別
- 從管理方式來講
- 對于棧來講厂汗,是由編譯器自動管理委粉,無需我們手工控制;
- 對于堆來說娶桦,釋放工作由程序員控制贾节,容易產(chǎn)生內(nèi)存泄漏(memory leak)
- 從申請大小方面講
- 椫梗空間比較小
- 堆空間比較大
- 從數(shù)據(jù)存儲方面來講
- 棧空間中一般存儲基本類型栗涂,對象的地址
- 堆空間一般存放對象本身知牌,block的copy等
6.ARC下還會存在內(nèi)存泄漏嗎?
- 循環(huán)引用會導致內(nèi)存泄漏
- Objective-C對象和CoreFoundation對象進行橋接的時候如果管理不當也會導致內(nèi)存泄漏
- CoreFoundation中的對象不受ARC管理斤程,需要開發(fā)者手動釋放