標籤:
1.記憶體分區情況:
a.代碼區:存放函數二進位代碼;
b.資料區:系統運行時申請記憶體並初始化,系統退出時由系統釋放,主要存放常量,靜態變數,全域變數;
c.堆區:通過malloc等函數或者new動態申請到的,需要程式員手動申請和釋放;
d.棧區:函數模組內申請,函數結束時由系統自動釋放。存放局部變數,函數參數。
2.隊列和棧的區別:
隊列和棧是兩種不同的資料容器,從資料結構的角度來說都是線性結構的,區別在於隊列是一種先進先出的資料結構,在隊列的兩端都可以進行資料的操作,一端進行入隊列操作,另一端進行出隊列操作,而對於棧來說,棧是先進後出的方式,而且只能在棧頂進行資料的操作。
3.http協議中post和get請求的區別
post請求:
a.提交的參數包含在訊息主體內,外界看不到請求資料;
b.提交的資料大小沒有限制;
c.可以設定書籤
get請求:
a.提交的參數不包含在訊息體內,資料放在請求行
b.提交的資料大小有限制
c.不可以設定書籤
4.Quartz 2D的繪圖功能的三個核心概念
上下文:主要用於描述圖形寫入哪裡
路徑:是在圖層上繪製的內容
狀態:用於儲存配置變化的值,填充和輪廓
5.Objective-c裡面的NSInteger和int的區別
NSInteger是基礎資料型別 (Elementary Data Type)對象,不是NSNumber的子類,也不是NSObject的子類。NSInteger是int或者long的別名,區別在於NSInteger會根據系統是32位還是64位來決定本身是int還是long
6.Objective-c中建立線程的方法有哪些?在主線程中執行代碼的方法是什嗎?延時執行代碼的方法是什嗎?
建立線程的方法主要有三種:使用NSThread建立,使用GCD的dispatch建立,使用子類化的NSOperation,然後將其加入到NSOperarionQueue中。在主線程執行代碼,方法是performSelectorOnMainThread,如果想延時執行代碼可以用performSelector:onThread:withObject:waitUntilDone:
7.類別,類擴充和繼承的比較
類別只能添加方法,不能添加屬性,類擴充和繼承可以添加屬性,繼承可以刪除,修改方法,類比不能,類擴充添加的方法必須要實現,類擴充類似私人的類別
8.UIView和UIWindow,CALayer的聯絡和區別
UIView是視圖基類,UIViewController是視圖控制器基類,UIResponder是可以用來表示一個可以在螢幕上響應觸摸事件的對象。
UIWindow是UIView的子類,主要有兩個作用,一是提供一個地區用來顯示UIView,二是用來分發事件,一個應用基本上只有一個UIWindow。
CALayer和UIView的區別:
CALayer是繼承自NSObject,而UIView的繼承結構是UIResponder:NSObject,從兩者的繼承結構可以看出,UIView可以響應觸摸事件,而CALayer是不能響應觸摸事件的,兩者所屬架構也不同,UIView來自UIKit架構,CALayer來自QuartzCore架構,CALayer的座標系統多了一個anchorPoint的屬性。
9.__block和__weak的區別
__block不管是在ARC還是MRC下都可以使用,可以修飾對象,也可以用來修飾基礎資料型別 (Elementary Data Type)
__weak只能在ARC模式下使用,只能修飾對象,不能修飾基礎資料型別 (Elementary Data Type)
__block對象可以在block中重新賦值,__weak不可以
10.常見的http狀態代碼有哪些
http狀態代碼:302代表請求重新導向,500以上是伺服器錯誤,400以上是地址錯誤或者找不到伺服器,200以上是正確,100以上是請求接受成功。
11.static關鍵字的作用
函數體內的static變數的作用範圍為該函數體,該變數的記憶體只被分配一次,其值在下次調用時還是維持上一次的值
類中的static成員變數屬於整個類所擁有,對類的所有對象只有一份拷貝
類中的static成員函數屬於整個類所擁有,這個函數不接收this指標,所以只能訪問類的static成員變數
12.堆和棧的區別
管理方式上,棧是由編譯器自己去管理,堆是由程式員去管理。
申請大小上,棧是向低地址擴充的資料結構,是一塊連續的記憶體地區,棧頂的地址和棧的最大容量是系統預先規定好的,能從獲得的空間較小;堆是向高地址擴充的資料結構,是不連續的記憶體地區。用的是鏈表的方式進行儲存,堆的大小受限於系統中有效虛擬記憶體的大小,堆獲得的空間比較靈活,也比較大。
片段問題上,堆會頻繁的申請,釋放,而且不是連續的,容易造成大量的片段,對於棧來講,就不會造成片段空間,因為站是先進後出,是連續的記憶體地區
分配效率上,棧是由編譯器管理,分配效率更高一點。
iOS基礎知識點總結