老胡給的面試題

1.簡要描述strong,weak,assign,retain區別以及應用場景web

先說assign,assign就是簡單的賦值,不作內存層面的改變,簡單點說就是兩個對象指向同一個內存區,一個地方的變了,其餘的地方都會跟着變數組

retain就是指針拷貝,仍是指向同一個內存區,這個對象的retaincount會+1,他的setter方法會將原來的值先release掉,再retain新的值緩存

strong就是強引用,當strong修飾的指針指向的內存發生改變時,由於強引用會持有該對象,指針會指向新的內存服務器

weak弱引用也能夠指向那塊內存,可是不持有,因此當指針指向的內存發生改變時,weak修飾的指針就會變成空指針網絡

2.寫出幾個常見的網絡請求方式app

get:通常只是從服務器得到數據,請求時會提交給服務器一些請求參數,附加在url上,參數之間以&分割框架

post:多用於給服務器提交數據,提交的數據通常放在body裏面,保密性高iview

3.列出viewController的生命週期以及相關函數,和調用次序函數

被建立post

alloc   建立對象,分配空間

init     初始化

loadview   載入視圖

viewdidload   載入完成

viewwillapper   即將出現

viewdidappear  已經出現

移除屏幕

viewwilldisappear   即將移除

viewdiddisappear 已經移除

dealloc   釋放

4.寫出uiwindow,uiviewcontroller view之間的關係

uiwindow也是uiview的子類,可是通常程序都只會有一個uiwindow,是程序中全部view的根,全部view都必須貼在uiwindow上,或者他的superview的superview直到最底層貼在uiwindow上

uiviewcontroller負責管理uiview的層次結構,響應程序

5.是否瞭解containerviewcontroller的概念,若是瞭解請列出常見的containerviewcontroller

概念就是一個viewcontroller顯示的一部分屬於另一個viewcontroller

咱們經常使用的UINavigationController,UITabBarController就屬於

6.block的起源與oc的寫法,自定義一個類型block,描述一下block在arc和mrc下內存存放的位置

block是c的擴充功能

typedef int(^Myblock)(int,int);

靜態變量在棧上

全局變量在全局數據區域

沒有引用變量的存於堆

arc會自動將block從棧複製到堆上

mrc下須要顯示執行copy活着release方法

7.經常使用的開源庫框架

fmdb afnetworking sdwebimage

8.通知消息和代理的的區別

通知時多對多

代理通常是一對一

9.類繼承和類擴展區別,類別

繼承能夠增長,修改,刪除方法,嗨能夠增長屬性

擴展能夠增長屬性,擴展增長的方法必須實現

類別能夠增長屬性和方法

10.複述一下uitableview的複用機制

建立一個數組看成cell的複用池,經過計算偏移量來計算cell師傅已經移出屏幕,若是移出,就將cell從table上移除,加到複用池中

同理,判斷偏移量,計算出須要一個新的cell顯示在屏幕上時,須要先從複用池找看有沒有對應的cell,若是有就直接拿出來用,沒有,就實例化新的cell

11.複述一下arc和mrc下的區別,以及oc裏面混編須要作的修改

arc時自動內存管理

mrc下須要本身釋放本身申請的內存

混編須要加上-fno-objc-arc標記

12.若是要你本身寫一個mjrefresh,寫一下思路,若是能用代碼實現能夠用代碼實現

13.說一下你對runtime的理解

runtime是一套比較底層的純C語言API, 屬於1個C 語言庫, 包含了不少底層的C語言API,在咱們平時編 寫的OC代碼中, 程序運行過程時, 其實最終都是轉成 了runtime的C語言代碼, runtime算是OC的幕後工 做者

14.kvc和kvo的理解

KVO 能夠觀察某個對象的變量變化過程,KVC 是 知足被觀察的編碼規範。 

15.sdwebimage的原理及做用

先顯示placeholder的圖片,而後再緩存區尋找,若是有,就顯示,沒有,就建立一個新線程,去本地硬盤找,找到了,就存到緩存,並顯示,沒有,則開始下載,下載結束,顯示圖片並緩存到緩存和硬盤

相關文章
相關標籤/搜索