OC 面试问题汇总
OC 問題匯總:?
1. 你如何理解 iOS 內存管理
? ?1. new alloc copy retain這些對象我們都要主動的release或者 autorelease
? ?2. 如果是類方法創建的對象,那么系統自動釋放池自動在適當的 時候會幫我們 release
? ?3. ARC xcode 自動會幫我們人工智能的添加 release autorelease 操 作?
2. C語言里的數組與OC數組的區別
OC 數組是一個對象,有大量的方法,c 沒有都需要自己寫 C 數組刪除是需要后面往前移動,oc 數組自動處理?
3. 淺拷貝與深拷貝的區別 或者什么是深拷貝 什么是淺拷貝
?copy, mutableCopy
@interface A {?
B *b; }?
淺拷貝只是拷貝對象本身,不會對里面的子對象進一步拷貝?
?深拷貝會對子對象以及子對象的子對象進一步拷貝
?4. 類別的作用
?類別是給已有的類添加方法,但是不能添加變量,匿名類別除外 ()?
5. 類別和繼承什么區別
類別/類目/Category 很方便給現有類添加方法。但是不能添加成 員變量,匿名類除外,比如可以給 NSString 增加方法,給 UINavigationBar 增加方法,比如 SDWebImage 給 UIImageView 增 加了 setImageWithURL:方法。類別對于使用者很方便?
繼承可以給現有的類增加方法和成員變量。繼承對于使用者來 說不如類別方便 ,比如對 SDWebImage 如果用繼承的話,那么就 需要寫一個類似于 QFImageView 然后把所有的 UIImageView 改成?
QFImageView,這里不如類別方便?
6. C 和 OC 有哪些基本數據類型?
C char, short, int, struct, union, enum?
NSString, nsarray, nsdictionary.?
7. 代理和協議什么區別?
代理是一種概念,協議是一種技術,代理是用協議來實現的,代理 是 2 個對象之間通訊的一種方式。 代理主要做反向傳值的。實現系統的一些回調方法,比如 scrollview 滑動事件,選擇照片,asi 網絡下載完成等。?
iOS 開發和 objective-c 區別
8. 代理和通知中心/廣播/NoficationCenter 什么區別?
代理主要是反向傳值,一般用來 1:1 的兩個對象通訊上。?
通知中心是通過注冊然后接收事件的一種 n:n(多對對) 的方法?
?
9. 解釋 const, static, inline 關鍵字
const 修飾指針,或者常量,比如不可變,
static 修飾變量表示作用域,比如全局的私有變量,函數內部的 static 是內部的私有變量。
Static 修飾函數表示函數是文件作用域
Inline 表示內聯。一般來說 inline 需要和 static 聯合用 一般用法是 static inline int max(int a, int b) {?
return a>b?a:b; }?
static inline作用是和宏類似,只不過是方便調試(宏不能斷掉調 試,static inline 可以)。運行時候是一樣的。
一般 c/c++短小的函數都用 static inline 內聯函數?
10. OC 里怎么實現多繼承?
OC 沒有多繼承。用協議實現多繼承,把協議中的方法在實現的類 中重寫 C++有多繼承,多繼承其實用好了很方便。C++多繼承很容易出現 二一性比如:?
類 A { int a;}
類B: 類A,類C:類A
類D : B, C那么 int a到底是繼承自誰的 單繼承?
11.解釋KVC和KVO
Key value coding, Key value observer.
Kvc 是路徑訪問的規范,kvo 是觀察某個變量的變化過程
KVO 可以觀察某個對象的變量變化過程,KVC 是滿足被觀察的編 碼規范。
KVC/KVO 類似于代理,通知中心。都是一種通訊方法。?
12. 什么是單例模式?
單例就是在多個對象之間共享數據,類似于全局變量,比如數據 庫打開一次,多個界面都可以使用?
13. NSString *name = @”1000phone.com”,[name release]會出現什么 情況?
這個代碼不滿足 objective-c 的內存管理黃金法則。沒有 alloc 就?
release,
14. 列舉所知道的 iOS 的類
15. C/C++和 OC 怎么混用?
.m -> .mm?
16. 本地存儲方式有哪幾種?
數據庫,nsuserdefauts, file , plist,archieve 歸檔 比較小的就放在 nsuserdefaults(以文件設計的存放在 Libraray 中) 數據庫里面適合存放一條一條的記錄
file 一般存普通文件,圖片,視頻,音頻等
plist 存放比 nsuserdefaults 大一些的
歸檔 nsarchieve 可以存對象?
17.解釋OC里的id類型
id 是泛型指針,可以指向任何 oc 類型,
id =~ NSObject *
id 是 objc_object 的 typedef,執行 Class 對象?
18. retain、copy、readonly、readwrite 的區別
retain對計數器+1 copy是創建一個新對象,readonly只產生getter 函數,readwrite 產生 setter, getter 函數?
19. copy 是深拷貝還是淺拷貝
copy 缺省是淺拷貝.但是 copy 也可以做成深拷貝?
20. copy 和 mutableCopy 區別
copy 是拷貝,mutableCopy 是可變拷貝,比如把 NSString 通過 mutableCopy 變 成 NSMutableString, 把 NSArray 通 過 mutableCopy 變成 NSMutableArray.
NSString -à?NSMutableString, NSArrayà?NSMutableArray,?
NSDictionaryà?NSMutableDictionary, NSData->NSMutableData;?
21. 怎么實現對象的本地存儲?
歸檔 NSArchieve
22. 遍歷數組的三種方式有什么區別
for forin iterator
forin 也叫快速循環。為什么他叫快速循環,原因是速度快?為什?
么速度快? 可以通過優化提前把 forin 里面的 array 數組數組全部?
導入到 cpu cache 中。因為 cache 訪問速度把內存快至少 100 倍?
23. NSArray, NSDictionary 這些是如何做的??
NSArray 使用鏈表做的?
NSDictionary 使用 hash 表做出來的
?24. C++怎么調用 C 的方法?
extern “C” int foo(){ };?
25. Blocks 語法有什么優點
Blocks 類似于 c 中回調函數,和代理類似的,類似于 java 中的 listener 匿名函數
26. 什么是委托代理模式?
委托代理是 2 個對象之間的一種通訊方式。一方使用協議,代理?
另外一方實現協議,類似于回調,blocks 等語法。 目的是為了軟件設計的低耦合?
27. 什么是通知中心?
通知中心是多對多的平等的通訊模式。主要用在多個對象之間松 耦合的通訊模式。對象和對象之間通過通知的名字就可以進行關 聯通訊。?
28.解釋關鍵字static、const、inline、 static inline、volatile?
static 修飾變量表示靜態變量,根據作用域 不同
extern 和 static 是相反的。
Static 修飾函數是表示函數在本文件有效?
Static inline 聯合在一起表示內聯函數。類似于宏
Const 修飾變量和變量的內容只讀
Volatile 表示每次都從內存中真正的讀取。主要是用于嵌入式中, 讀取硬件。?
29. OC 中有私有方法嗎?怎么實現
在.m 文件中實現 Category,只是在.m 中方法?
30. OC 中有私有成員變量嗎?怎么實現?
在.m 文件中實現匿名類別 Category?
31. 成員變量的作用域有哪幾種
?@public, @protected, @private?
32. 數據庫能不能存圖片,怎么存?
可以存圖片, nsdata 存,但是我們一般不這樣存,我們存路徑把 圖片存在沙盒中。?
33. 不同屏幕怎么適配
iphone4, iphone4S 640x960 retina
iphone5, iphone5S, 640x1136
iphone6, iphone6S, 1334x750像素
iphone6 plus? 1920x1080像素
iphone6s plus? 1920x1080像素
34. 不同版本屏幕旋轉怎么適配?
35. 內存警告應該怎么做?
盡量多的釋放內存。把一些內容寫到文件中,不要保存在內存中。
36. iOS7, iOS8, iOS9區別?
37. NSNotification 是同步還是異步的?
是同步的. 如果需要異步 必須使用 NSNotificationQueue 實現
?
轉載于:https://www.cnblogs.com/ljcgood66/p/5339095.html
總結
- 上一篇: SpringMVC小结
- 下一篇: 字节流还是字符流