1.深拷貝和淺拷貝的理解?ios
淺拷貝:只是對指針的拷貝,拷貝後兩個指針指向同一個內存空間數據庫
深拷貝:不但對指針進行拷貝,並且對指針指向的內容進行拷貝,經深拷貝後的指針是指向兩個不一樣地址的指針安全
對一個實例進行深拷貝時當前類須要實現NSCopying協議。
網絡
淺拷貝是複製出來一個跟原對象是同一地址的對象,而深拷貝則是複製出來一個跟源對象不一樣地址的對象,改變原對象,對新對象沒有影響。架構
2. 寫出方法獲取ios內存使用狀況。app
void logMemoryInfo()iphone
3. 怎樣實現一個singleton的類ide
要實現單例,首先須要一個static的指向類自己的對象,其次須要一個初始化類函數。函數
1)@synchronizedoop
static InstanceClass *instance; + (InstanceClass *)defaultInstance { @synchronized (self){ if (instance == nil) { instance = [[InstanceClass alloc] init]; } } return instance; }
2)GCD
static InstanceClass *instance; + (InstanceClass *)defaultInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[InstanceClass alloc] init]; }); return instance; }
4. 什麼是安全釋放?
把對象指針置爲nil,再對其釋放。
5.RunLoop是什麼?
runloop是事件接收和分發機制的一個實現,字面上來講,是線程中的循環
Runloops是線程的基礎架構部分。一個runloop就是一個事件處理循環,用來不停的調配工做以及處理輸入事件。使用run loop的目的是使你的線程在有工做的時候工做,沒有的時候休眠。
每一個線程,包括程序的主線程(main thread)都有與之相應的run loop對象
6. 什麼是序列化和反序列化,能夠用來作什麼?如何在OC中實現複雜對象的存儲?
把對象轉換爲字節序列的過程稱爲對象的序列化
把字節序列恢復爲對象的過程稱爲對象的反序列化
將對象寫到文件或者數據庫裏,而且能夠讀取出來
遵循NSCoding協議,來實現複雜對象的存儲
實現該協議後就能夠對其進行打包或者解包,而後轉化爲NSData
7.寫一個標準宏MIN,這個宏輸入兩個參數並返回較小的一個?
#define MIN(A,B) ((A)<(B)?(A):(B))
8. iphone os有沒有垃圾回收機制?簡單闡述一下OC內存管理。
沒有 引用計數機制
1:對你本身擁有的對象負責.你只能釋放你擁有的對象.
2:凡是你經過retain,alloc,copy等手段得到了全部權的對象,都必須在你再也不使用它的時候,,由你來調 用release,autorelease等手段來釋放對它的全部權.
3:在必定的代碼段內,對同一個對象所做的copy,alloc和retain的次數應該與autorelease及release的 次數相等;
4:能夠在dealloc的方法中釋放你所佔有的實例變量.
5:對於便利構造器和訪問器來講,你沒有經過上述的手段得到對象的全部權,所以在這些狀況下你無須對 得到的對象進行額外的釋放操做.
6:autorelease只不過意味着預約延遲發送一條release信息.當前的引用計數並無變.
9. 簡述應用程序按Home鍵進入後臺時的生命週期,以及從後臺回到前臺時的生命週期?
按Home鍵進入後臺:
- (void)applicationWillResignActive:(UIApplication *)application{}
- (void)applicationDidEnterBackground:(UIApplication *)application{}
從後臺回到前臺:
- (void)applicationWillEnterForeground:(UIApplication *)application{}
- (void)applicationWillResignActive:(UIApplication *)application{}
10.ViewController 的 alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分別是在何時調用的?在自定義ViewController的時候這幾個函數裏面應該作什麼工做?
alloc:申請內存空間的時候調用.
init:視圖初始化的時候,賦一些程序的初始值
LoadView:加載視圖的時候調用 self.view != nil的時候,執行loadview,加載一些本身的視圖
ViewDidLoad:視圖已經加載的時候調用(網絡數據之類的,刷新表之類)(添加通知)
ViewWillAppear:視圖將要出現的時候
ViewDidUnload:視圖已經卸載(數據釋放掉)(移除通知)
dealloc:視圖已經銷燬的時候(self.view = =nil)本身擁有的實例變量釋放掉