iOS 中級面試題
非作者原著 來自摘抄
參考文獻
什麼是arc
- 在物件被建立時 retain Count +1 在物件被release時 retain Count-1 當retain
count為0時 銷燬物件
- 程式中加入autoreleasepool的物件會由系統自動加上autorelease方法 如果該物件引
用計數為0 則銷燬
arc建立是為了什麼
MRC 記憶體管理的缺點
1.當我們要釋放一個堆記憶體時 首先要確定指向這個堆空間的指標都被release(避擴音前
釋放)
2.釋放指標指向的堆空間 首先要確定哪些指標指向同一個堆 這些指標只能釋放一次(MRC
下即誰建立 誰釋放 避免重複釋放)
3.模組化操作時 物件可能被多個模組建立和使用 不能確定最後由誰去釋放
4.多執行緒操作時 不確定哪個執行緒最後使用完畢
assign vs weak, __block vs __weak 區別
assign 適用於基本資料型別 weak適用於NSObject物件 並且是一個弱引用
assign 也可用來修飾物件 為什麼不用 因為被assign修飾的物件在釋放之後 指標的地
址還是存在的 也就是說指標並沒有被置nil 如果後續的記憶體分配中 剛好分配到這塊地
址 程式就會崩潰
weak修飾的物件在釋放之後 指標地址會被置nil
__block 用來修飾一個變數 這個變數可以在block中被修改
__block 使用__block修飾的變數在block中會被retain(在arc下 mrc不會)
__weak 使用__weak修飾的變數不會在block程式碼塊中被retain
__weak 避免在block出現迴圈引用
__block在arc和非arc下含義一樣嗎
不一樣
在MRC中 __block variable在block中使用時不會retain的
在ARC中 __block則是會Retain的
取而代之的是用__weak或是__unsafe unretained來更精確的描述weak reference的
目的
其中前者只能在ios5之後可以使用 但是比較好
使用nonatomic 一定是執行緒安全的嗎
不是的
atomic原子操作 系統會為setter方法加鎖
nonatomic不會為setter方法加鎖
atomic 執行緒安全 需要消耗大量系統資源來為屬性加鎖
nonatomic 非執行緒安全 適合記憶體較小的移動裝置
+(void)load +(void)initialize 有什麼用處
+load 會在類初始載入時被呼叫
+initialize會在第一次呼叫類方法或例項方法之前被呼叫
為什麼其他語言叫函式呼叫 objective-c裡則是給物件發訊息
動態執行時語言
什麼是method swizzling?
我們可以利用 method_exchangeImplementations 來交換2個方法中的IMP,
我們可以利用 class_replaceMethod 來修改類,
我們可以利用 method_setImplementation 來直接設定某個方法的IMP
UIView CALayer什麼關係
- UIView 主要處理事件 frame bounds 實際上內部是訪問它所含有的CALayer的相
關屬性
- UIView有一個layer屬性 可以返回它的主CALayer例項 UIView有一個layerClass方
法 返回主layer所使用的類 UIView的子類 可以通過過載這個方法 來讓UIView使用不
同的CALayer來顯示
- UIView的layer樹形在系統內部 被系統維護著三份copy
1. 邏輯樹 就是程式碼裡可以操縱的 列如更改layer的屬性
2. 動畫樹 這是一箇中間層 系統正在這一層上更改屬性 進行各種渲染操作
3. 顯示樹 這個樹的內容就是當前正被顯示在螢幕上的內容
- CALayer 負責繪製
loadView是幹嘛用的
1、如果你用了nib檔案,過載這個方法就沒有太大意義。因為loadView的作用就是載入
nib。如果你過載了這個方法不呼叫super,那麼nib檔案就不會被載入。如果呼叫了
super,那麼view已經載入完了,你需要做的其他事情在viewDidLoad裡面做更合適。
2、如果你沒有用nib,這個方法預設就是建立一個空的view物件。如果你想自己控制
view物件的建立,例如建立一個特殊尺寸的view,那麼可以過載這個方法,自己建立一
個UIView物件,然後指定 self.view = myView; 但這種情況也沒有必要呼叫super,
因為反正你也不需要在super方法裡面建立的view物件。如果呼叫了super,那麼就是浪
費了一些資源而已
GCD裡面有哪幾種Queue?你自己建立過序列queue嗎?背後的執行緒模型是什麼樣的
1.主佇列 dispatch_main_queue(); 序列 ,更新UI
2.全域性佇列 dispatch_global_queue(); 並行,四個優先順序:
background,low,default,high
3.自定義佇列 dispatch_queue_t queue ; 可以自定義是並行:
DISPATCH_QUEUE_CONCURRENT或者序列DISPATCH_QUEUE_SERIAL
http的post和get啥區別?
1.GET請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳
輸資料,引數之間以&相連,如:login.action?name=hyddd&password=idontknow&
verify=%E4%BD%A0%E5%A5%BD。如果資料是英文字母/數字,原樣傳送,如果是空格,
轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如:
%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII。
POST把提交的資料則放置在是HTTP包的包體中。
2.”GET方式提交的資料最多隻能是1024位元組,理論上POST沒有限制,可傳較大量的資料
IIS4中最大為80KB,IIS5中為100KB”??!
以上這句是我從其他文章轉過來的,其實這樣說是錯誤的,不準確的:
(1).首先是”GET方式提交的資料最多隻能是1024位元組”,因為GET是通過URL提交資料,
那麼GET可提交的資料量就跟URL的長度有直接關係了。而實際上,URL不存在引數上限的
問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及伺服器對它的
限制。IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、
FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。
注意這是限制是整個URL長度,而不僅僅是你的引數值資料長度。[見參考資料5]
(2).理論上講,POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制,說
“POST資料量存在80K/100K的大小限制”是不準確的,POST資料是沒有限制的,起限制作
用的是伺服器的處理程式的處理能力。
3.在ASP中,服務端獲取GET請求引數用Request.QueryString,獲取POST請求引數用
Request.Form。在JSP中,用request.getParameter(\”XXXX\”)來獲取,雖然jsp中
也有request.getQueryString()方法,但使用起來比較麻煩,比如:傳一個test.jsp?
name=hyddd&password=hyddd,用request.getQueryString()得到的是:name=
hyddd&password=hyddd。在PHP中,可以用GET和GET和_POST分別獲取GET和POST中的
資料,而REQUEST則可以獲取GET和POST兩種請求中的資料。值得注意的是,JSP中使用
request和PHP中使用REQUEST則可以獲取GET和POST兩種請求中的資料。值得注意的是,
JSP中使用request和PHP中使用_REQUEST都會有隱患,這個下次再寫個文章總結。
4.POST的安全性要比GET的安全性高。注意:這裡所說的安全性和上面GET提到的“安全”
不是同個概念。上面“安全”的含義僅僅是不作資料修改,而這裡安全的含義是真正的
Security的含義,比如:通過GET提交資料,使用者名稱和密碼將明文出現在URL上,因為(1)
登入頁面有可能被瀏覽器快取,(2)其他人檢視瀏覽器的歷史紀錄,那麼別人就可以拿到
你的賬號和密碼了,除此之外,使用GET提交資料還可能會造成Cross-site request
forgery攻擊。
總結一下,Get是向伺服器發索取資料的一種請求,而Post是向伺服器提交資料的一種
請求,在FORM(表單)中,Method預設為”GET”,實質上,GET和POST只是傳送機制不同
並不是一個取一個發!
相關文章
- iOS面試題 --- 中級iOS面試題
- iOS面試題iOS面試題
- iOS 面試問題iOS面試
- iOS Runloop(面試題)iOSOOP面試題
- 知乎iOS面試題iOS面試題
- 做好面試的準備之—常見面試題(適合初級、中級的面試者)面試題
- 那些著名或非著名的iOS面試題(中)iOS面試題
- iOS面試題精選iOS面試題
- iOS 面試題彙總iOS面試題
- iOS 面試題總結iOS面試題
- iOS 面試題解答二iOS面試題
- iOS基礎面試題iOS面試題
- iOS 面試題整理(一)iOS面試題
- 那些著名或非著名的iOS面試題-中編iOS面試題
- 社招中級前端筆試面試題總結前端筆試面試題
- 面試了 20 個初/中級 iOS 工程師之後(上)面試iOS工程師
- 面試了 20 個初/中級 iOS 工程師之後(下)面試iOS工程師
- iOS面試題答案 --- 底層iOS面試題
- iOS底層面試題–RunLoopiOS面試題OOP
- iOS面試題 — 老生常談iOS面試題
- iOS底層面試題--RunLoopiOS面試題OOP
- iOS面試題總結(七)iOS面試題
- iOS面試題總結(三)iOS面試題
- iOS面試題總結(五)iOS面試題
- iOS面試題總結(六)iOS面試題
- iOS面試題總結(四)iOS面試題
- iOS面試題總結(二)iOS面試題
- iOS面試題總結(一)iOS面試題
- iOS面試題·自整理·TwoiOS面試題
- 【面試】社招中級前端筆試面試題總結-答案及擴充前端筆試面試題
- java初級面試題(二)Java面試題
- 答面試題·答J_Knight_《2017年5月iOS招人心得(附面試題)》中的面試題(一)面試題iOS
- 答面試題·答J_Knight_《2017年5月iOS招人心得(附面試題)》中的面試題(二)面試題iOS
- iOS面試中經常問的點 - 基礎問題(一)iOS面試
- Android 面試中級篇Android面試
- iOS探索 runtime面試題分析iOS面試題
- 阿里體育iOS崗面試題阿里iOS面試題
- 杭州ZoomVideo iOS面試題OOMIDEiOS面試題