1. 程式人生 > >iOS經典面試題

iOS經典面試題

@property中有哪些屬性關鍵字?
weak屬性需要在dealloc中置nil麼?
@synthesize和@dynamic分別有什麼作用?
ARC下,不顯式指定任何屬性關鍵字時,預設的關鍵字都有哪些?
用@property宣告的NSString(或NSArray,NSDictionary)經常使用copy關鍵字,為什麼?如果改用strong關鍵字,可能造成什麼問題?
@synthesize合成例項變數的規則是什麼?假如property名為foo,存在一個名為_foo的例項變數,那麼還會自動合成新變數麼?
在有了自動合成屬性例項變數之後,@synthesize還有哪些使用場景?

objc中向一個nil物件傳送訊息將會發生什麼?
objc中向一個物件傳送訊息[obj foo]和objc_msgSend()函式之間有什麼關係?
什麼時候會報unrecognized selector的異常?
一個objc物件如何進行記憶體佈局?(考慮有父類的情況)
一個objc物件的isa的指標指向什麼?有什麼作用?
下面的程式碼輸出什麼?
runtime如何通過selector找到對應的IMP地址?(分別考慮類方法和例項方法)
使用runtime Associate方法關聯的物件,需要在主物件dealloc的時候釋放麼?
objc中的類方法和例項方法有什麼本質區別和聯絡?
_objc_msgForward函式是做什麼的,直接呼叫它將會發生什麼?
runtime如何實現weak變數的自動置nil?
能否向編譯後得到的類中增加例項變數?能否向執行時建立的類中新增例項變數?為什麼?

runloop和執行緒有什麼關係?
runloop的mode作用是什麼?
以+ scheduledTimerWithTimeInterval...的方式觸發的timer,在滑動頁面上的列表時,timer會暫定回撥,為什麼?如何解決?
猜想runloop內部是如何實現的?

objc使用什麼機制管理物件記憶體?
ARC通過什麼方式幫助開發者管理記憶體?
不手動指定autoreleasepool的前提下,一個autorealese物件在什麼時刻釋放?(比如在一個vc的viewDidLoad中建立)
BAD_ACCESS在什麼情況下出現?
蘋果是如何實現autoreleasepool的?

使用block時什麼情況會發生引用迴圈,如何解決?
在block內如何修改block外部變數?
使用系統的某些block api(如UIView的block版本寫動畫時),是否也考慮引用迴圈問題?
GCD的佇列(dispatch_queue_t)分哪兩種型別?
如何用GCD同步若干個非同步呼叫?(如根據若干個url非同步載入多張圖片,然後在都下載完成後合成一張整圖)
dispatch_barrier_async的作用是什麼?
蘋果為什麼要廢棄dispatch_get_current_queue?