1. Object-C有多繼承嗎?沒有的話用什么代替?
1> OC是單繼承,沒有多繼承
2> 有時(shí)可以用分類和協(xié)議來代替多繼承
2. Object-C有私有方法嗎觉壶?私有變量呢?
1> OC沒有類似@private的修飾詞來修飾方法件缸,只要寫在.h文件中铜靶,就是公共方法
2> 如果你不在.h文件中聲明,只在.m文件中實(shí)現(xiàn),或在.m文件的Class Extension里聲明争剿,那么基本上和私有方法差不多已艰,可以使用類擴(kuò)展(Extension)來增加私有方法和私有變量
3> 使用private修飾的全局變量是私有變量
3. 關(guān)鍵字const什么含義?
const int a;
int const a;
const int *a;
int const *a;
int * const a;
int const * const a;
1> 前兩個(gè)的作用是一樣:a 是一個(gè)常整型數(shù)
2> 第三蚕苇、四個(gè)意味著 a 是一個(gè)指向常整型數(shù)的指針(整型數(shù)是不可修改的哩掺,但指針可以)
3> 第五個(gè)的意思:a 是一個(gè)指向整型數(shù)的常指針(指針指向的整型數(shù)是可以修改的,但指針是不可修改的)
4> 最后一個(gè)意味著:a 是一個(gè)指向常整型數(shù)的常指針(指針指向的整型數(shù)是不可修改的涩笤,同時(shí)指針也是不可修改的)
4. static的作用嚼吞?
1> static修飾的函數(shù)是一個(gè)內(nèi)部函數(shù),只能在本文件中調(diào)用蹬碧,其他文件不能調(diào)用
2> static修飾的全部變量是一個(gè)內(nèi)部變量舱禽,只能在本文件中使用,其他文件不能使用
3> static修飾的局部變量只會(huì)初始化一次恩沽,并且在程序退出時(shí)才會(huì)回收內(nèi)存
5. 線程和進(jìn)程的區(qū)別誊稚?
1> 一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)進(jìn)程,一個(gè)進(jìn)程幫助程序占據(jù)一塊存儲空間罗心。也有多個(gè)進(jìn)程的應(yīng)用(比如瀏覽器里伯,多開幾個(gè)頁面)
2> 要想在進(jìn)程中執(zhí)行任務(wù),就必須開啟線程协屡,一條線程就代表一個(gè)任務(wù)
3> 一個(gè)進(jìn)程中允許開啟多條線程俏脊,也就是同時(shí)執(zhí)行多個(gè)任務(wù)
6. 堆和棧的區(qū)別?
1> 堆空間的內(nèi)存是動(dòng)態(tài)分配的肤晓,一般存放對象,并且需要手動(dòng)釋放內(nèi)存
2> 椚先唬空間的內(nèi)存由系統(tǒng)自動(dòng)分配补憾,一般存放局部變量等,不需要手動(dòng)管理內(nèi)存
7. 為什么很多內(nèi)置的類卷员,如TableView的delegate的屬性是assign不是retain盈匾?
1> tableView的代理一般都是它所屬的控制器,控制器會(huì)對它內(nèi)部的view做一次retain操作
2> 假設(shè)tableView也對代理(控制器)做一次retain操作毕骡,那么就出現(xiàn)循環(huán)retain問題
8. 定義屬性時(shí)削饵,什么情況使用copy、assign未巫、retain窿撬?
1> copy:NSString、Block等類型
2> assign:非OC對象類型叙凡, 基本數(shù)據(jù)類型(兩個(gè)對象相互引用的時(shí)候劈伴,一端用retain, 一端用assign)
3> retain:OC對象類型
9. 對象是什么時(shí)候被釋放的握爷?
每個(gè)對象都有一個(gè)引用計(jì)數(shù)器跛璧,每個(gè)新對象的計(jì)數(shù)器是1严里,當(dāng)對象的計(jì)數(shù)器減為0時(shí),就會(huì)被銷毀
10. tableView的重用機(jī)制追城?
這里只是簡述:將離開屏幕的cell放到緩存池刹碾,重新拿來顯示到屏幕的其他位置(其他自己詳細(xì)描述)
11. ViewController 的loadView、viewDidLoad座柱、viewDidUnload分別是什么時(shí)候調(diào)用的教硫,在自定義ViewCointroller時(shí)在這幾個(gè)函數(shù)中應(yīng)該做什么工作?
1> loadView
當(dāng)?shù)谝淮问褂每刂破鞯膙iew時(shí)辆布,會(huì)調(diào)用loadView方法創(chuàng)建view
一般在這里自定義view
2> viewDidLoad
當(dāng)控制器的view創(chuàng)建完畢時(shí)會(huì)調(diào)用瞬矩,也就是在loadView后調(diào)用
一般在這里添加子控件、初始化數(shù)據(jù)
3> viewDidUnload
當(dāng)控制器的view因?yàn)閮?nèi)存警告被銷毀時(shí)調(diào)用
一般在這里回收跟界面相關(guān)的資源(界面都會(huì)銷毀了锋玲,跟界面相關(guān)的資源肯定不要了)
12. ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的景用?默認(rèn)的操作是什么?
當(dāng)應(yīng)用程序接收到系統(tǒng)的內(nèi)容警告時(shí)惭蹂,就有可能調(diào)用控制器的didRece…Warning方法
它的默認(rèn)做法是:
當(dāng)控制器的view不在窗口上顯示時(shí)伞插,就會(huì)直接銷毀,并且調(diào)用viewDidUnload方法
13. 怎么理解MVC盾碗,在Cocoa中MVC是怎么實(shí)現(xiàn)的媚污?
1> M:Model,模型廷雅,封裝數(shù)據(jù)
2> V:View耗美,視圖界面,負(fù)責(zé)展示數(shù)據(jù)
3> C:Controller航缀,控制器商架,負(fù)責(zé)提供數(shù)據(jù)(Model)給界面(View)
14. self.跟self->什么區(qū)別?
1> self.是調(diào)用get方法或者set放
2> self是當(dāng)前本身芥玉,是一個(gè)指向當(dāng)前對象的指針
3> self->是直接訪問成員變量
15. id蛇摸、nil代表什么?
1> id類型的指針可以指向任何OC對象
2> nil代表空值(空指針的值灿巧, 0)
16. 如何對iOS設(shè)備進(jìn)行性能測試?
Timer Profile