標籤:style io ar os 使用 sp on 檔案 資料
IOS試題收集1
1、Objective C中有多繼承嗎?沒有的話用什麼代替?
Protocol
2、Objective C中有私人方法嗎?私人變數呢?
OC類裡面只有靜態方法和執行個體方法這兩種,@private可以用來修飾私人變數,所有執行個體方法預設都是公有的,如果想要可以達到私人效果的方法可以不把方法的聲明放在@[email protected]
3、關鍵字const的含義是什嗎?
const int a;
int const a;
coust int *a;
int *const a;
int const *a const;
解釋:前兩個一樣,都為整形常量;第三個為指標指向不變的整形常量,即指標可變,整形常量不可變;第四個為指向可變的整形變數的常量指標,即整形變數可變,指標不會變;第五個為常指標指向整形常量;
4、關鍵字volatile的含義是什嗎?
5、關鍵字static
C++和Objective C中的static
4、#import和#include的區別,@class代表什嗎?
#import不會引起重複包含
5、線程和進程的區別
進程和線程都是由作業系統所體會的程式啟動並執行基本 單元,系統利用該基本單元實現系統對應用的並發性。 進程和線程的主要差別在於它們是不同的作業系統資 源管理方式。進程有獨立的地址空間,一個進程崩潰 後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變數,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程式要比多線程的程式健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共用某些變數的並行作業,只能用線程,不能用進程
6、堆和棧的區別
管理方式:對於棧來講,是由編譯器自動管理,無需 我們手工控制;對於堆來說,釋放工作由程式員控制, 容易產生memory leak。
申請大小:棧:在Windows下,棧是向低地址擴充的資料結構,是一塊連續的記憶體的地區。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時間就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。堆:堆是向高地址擴充的資料結構,是不連續的記憶體地區。這是由於系統是用鏈表來儲存的空閑記憶體位址的,自然是不連續的,而鏈表的遍曆方向是由低地址向高地址。堆的大小受限於電腦系統中有效虛擬記憶體。由此可見,堆獲得的空間比較靈活,也比較大。
片段問題:對於堆來講,頻繁的new/delete勢必會造成記憶體空間的不連續,從而造成大量的片段,使程式效率降低。對於棧來講,則不會存在這個問題,因為棧是先進後出的隊列,他們是如此的一一對應,以至於永遠都不可能有一個記憶體塊從棧中間彈出
分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變數的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。分配效率:棧是機器系統提供的資料結構,電腦會在底層對棧提供支援:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是C/C++函數庫提供的,它的機制是很複雜的。
7、Objective C的記憶體管理機制
8、IOS有沒有記憶體回收
9、UITableView的重用機制
10、ViewController的loadView、viewDidLoad、viewDidUnload分別什麼時候調用的,在自訂ViewController時在幾個函數中應該做什麼工作?
11、怎麼理解MVC,在Cocoa中MVC是怎麼實現的?
12、delegate和notification區別,分別在什麼情況下使用?
13、KVC(Key-Value-Coding)KVO(Key-Value-Observing)理解KVC與KVO(鍵-值-編碼與鍵-值-監看)
14、self.跟self什麼區別?id、nil代表什麼?
15、Category和Protocol
16、iOS程式運行流程
1. 系統調用app的main函數
2. main函數調用UIApplicationMain.
3. UIApplicationMain建立shared applicationinstance, UIApplication預設的instance.
4. UIApplicationMain讀取Info.plist找到主nib檔案, 載入nib,把shared application instance 設為nib的owner.
IOS試題收集1