首先 我也是醉了
招聘一個靠譜的iOS
Tank *tank = [[Tank alloc]init];
[tank retain];
[tank release];
[tank release];
它們的retain count分別是多少?
1 1 0 (也有人說永遠為1)
通知 代理 KVO 的區別
如果是屬性層的時間,不管是在不需要編程的對象還是在緊緊綁定一個view對象的model對象,我只使用觀察。對于其他的事件,我都會使用 delegate模式。如果因為某種原因我不能使用delegate,首先我將估計我的app架構是否出現了嚴重的錯誤。如果沒有錯誤,然后才使用 notification。
簡述UIViewCotroller的生命周期
1、 alloc? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建對象,分配空間
2、init (initWithNibName) 初始化對象,初始化數據
3、loadView ? ? ? ? ? ? ? ? ? ? ? ? ?從nib載入視圖 ,通常這一步不需要去干涉。除非你沒有使用xib文件創建視圖
4、viewDidLoad ? ? ? ? ? ? ? ? ? 載入完成,可以進行自定義數據以及動態創建其他控件
5、viewWillAppear ? ? ? ? ? ? ?視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
6、viewDidAppear ? ? ? ? ? ? ? 視圖已在屏幕上渲染完成
當一個視圖被移除屏幕并且銷毀的時候的執行順序,這個順序差不多和上面的相反
1、viewWillDisappear ? ? ? ? ? ?視圖將被從屏幕上移除之前執行
2、viewDidDisappear ? ? ? ? ? ? 視圖已經被從屏幕上移除,用戶看不到這個視圖了
3、dealloc ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 視圖被銷毀,此處需要對你在init和viewDidLoad中創建的對象進行釋放
在iOS開發中怎么定位和查找內存泄漏
1.靜態分析
通過靜態分析我們可以最初步的了解到代碼的一些不規范的地方或者是存在的內存泄漏,這是我們第一步對內存泄漏的檢測。當然有一些警告并不是我們關心的可以略過。
2.通過instruments來檢查內存泄漏
這個方法能粗略的定位我們在哪里發生了內存泄漏。方法是完成一個循環操作,如果內存增長為0就證明我們程序在該次循環操作中不存在內存泄漏,如果內存增長不為0那證明有可能存在內存泄漏,當然具體問題需要具體分析。
3.代碼測試內存泄漏
在做這項工作之前我們要注意一下,在dealloc的方法中我們是否已經釋放了該對象所擁有的所有對象。觀察對象的生成和銷毀是否配對。準確的說就是init(創建對象的方法)和dealloc是否會被成對觸發(簡單說來就是走一次創建對象就有走一次dealloc該對象)。
簡述KVC/KVO的異同
訪問一個對象屬性我們可以 person.age? 也可以通過kvc的方式? [person valueForKey:@"age"]
kvo 就是一個在語言框架層面實現的觀察者模式 通過kvc的方式修改屬性時,會主動通知觀察者
runloop是什么?在主線程中的某個函數里調用了異步函數,怎么樣block當前線程,且還能響應當前線程的timer事件,touch事件等.
runLoop 是事件循環隊列。
在主線程中調用異步函數,阻塞當前線程。
完成一個快速排序,說明其時間復雜度
block的實現原理
block實際上是: 指向結構體的指針
編譯器會將block的內部代碼生成對應的函數
我們說的oc是動態運行時語言是什么意思?
多態。 主要是將數據類型的確定由編譯時,推遲到了運行時。 這個問題其實淺涉及到兩個概念,運行時和多態。?簡單來說,運行時機制使我們直到運行時才去決定一個對象的類別,以及調用該類別對象指定方法。?多態:不同對象以自己的方式響應相同的消息的能力叫做多態。意思就是假設生物類(life)都用有一個相同的方法-eat;?那人類屬于生物,豬也屬于生物,都繼承了life后,實現各自的eat,但是調用是我們只需調用各自的eat方法。?也就是不同的對象以自己的方式響應了相同的消息(響應了eat這個選擇器)。 因此也可以說,運行時機制是多態的基礎。