iOS開發之OC面試題總結

來源:互聯網
上載者:User

iOS開發之OC面試題總結

1.簡述OC中記憶體管理機制

OC的記憶體管理機制是自動引用技術,記憶體管理的原則是誰開闢誰釋放,分為ARC和MRC,MRC的話就是需要我們程式員手動管理記憶體,ARC不需要我們手動管理記憶體,系統會自行管理。

2.readwrite,readonly,assign,retain,copy,nonatomic、atomic、strong、weak屬性的作用?

readWrite讀寫特性,可讀可寫.

readonly唯讀,只有getter,沒有setter.

assign一般用於基礎資料型別 (Elementary Data Type)和ID類型.

copy拷貝,一般用於NSString.分為深拷貝和淺拷貝,深拷貝拷貝的是對象,淺拷貝拷貝的是指標.

nonatomic非原子性,不考慮安全執行緒,優點是效率高.

atomic原子性,優點是安全執行緒,缺點是效率低.

strong強引用,和MRC下的retain一樣.weak弱引用,類似MRC下的assign.但是要注意的是strong和weak都是修飾物件類型的屬性的,不能修飾基礎資料型別 (Elementary Data Type).ARC下仍然使用assign修飾基礎資料型別 (Elementary Data Type).

3.關於iOS多線程問題

仔細閱讀:http://www.cocoachina.com/ios/20150731/12819.html

4.提升UITableView效能的幾點建議

1.cell高度計算 (可以先根據內容高度數組,返回cell時直接用數組返回高度)

2.cells的重用

3.cell快速滑動的時候不載入圖片,停止滑動的時候載入圖片

4.避免阻塞主線程

5.緩衝下載的圖片

6.不要過多使用Xib(如果可以的話使用storyboard)

7.使用CoreGraphics

8.透明度

也可仔細閱讀:http://www.cocoachina.com/ios/20150729/12795.html

6. 線程同步和非同步區別?

同步:一個線程要等待上一個線程執行完之後才能執行,生活中的例子(上廁所)。

非同步:同時去做兩個或者多個線程。比如邊聽歌邊看報。

7.堆和棧的區別?

棧區(stack)--由編譯器自動分配釋放,存放函數的參數值、局部變數的值。先進後出

堆區(heap)--一般由程式員分配釋放。先進先出

全域區(靜態區)(static)--全域變數和靜態變數。程式結束後由系統釋放。

文字常量區--常量字串存放在這裡。程式結束後由系統釋放。

程式碼區—存放函數體的二進位檔案。

8.iOS類是否可以多繼承?

不可以,可以通過delegate和protocol和類目來實作類別似多繼承。

9.iOS本機資料儲存都有哪幾種方式?iOS如何?複雜物件的儲存?

1.Write寫入方式:永久儲存在磁碟中。只支援NSString、NSData、NSArray、NSDictionary。

2.NSKeyedArchiver(歸檔)採用歸檔的形式來儲存資料,該資料對象需要遵守NSCoding協議

3.SQLite(FMDB)注意FMDB不是資料庫,而是一個SQLITE管理架構.

4.CoreData切記coredata不是資料庫,他的儲存核心思想是託管對象。只是咱們經常用的隱藏檔為SQLite.還可以用XML,二進位等方式.

10.iOS的動態性

1.動態類型。如id類型。實際上靜態類型因為其固定性和可預知性而使用得更加廣泛。靜態類型是強型別,而動態類型屬於弱類型。運行時決定接收者。

2. 動態綁定。讓代碼在運行時判斷需要調用什麼方法,而不是在編譯時間。

3. 動態載入。讓程式在運行時添加代碼模組以及其他資。

11.深拷貝和淺拷貝的理解?

深拷貝拷貝的是內容,淺拷貝拷貝的是指標。如果子類對象的地址改變就是深拷貝反之淺拷貝。

12.什麼是安全釋放

在對象dealloc中release之後再把指標置為nil

13.怎樣實現一個singleton。

+(ZMYSingleton*)sharedInstance{

staticLOSingleton*sharedInstance=nil;

staticdispatch_once_tonceToken; //線程鎖

dispatch_once(&onceToken,^{

//最多調用一次

sharedInstance=[[ZMYSingletonalloc]init];

});

returnsharedInstance;

}

13.RunLoop是什嗎?

一個RunLoop就是一個事件處理的迴圈,用來不停的調度工作以及處理輸入時間。使用runloop的目的是讓你的線程在有工作的時候忙於工作,而沒工作的時候處於休眠狀態。主要是是為了減少 cpu無謂的空轉。每個線程都有Runloop,主線程的Runloop時預設開啟的,手動開闢的子線程Runloop是預設不開啟 的,如果需要開啟,需要調用API[[NSRunloopcurrentRunloop]run]開啟.

最常見的需要開啟Runloop的是在子線程裡面調用計時器(NSTimer),如果不開啟runloop迴圈方法就不能正常執行.

14.寫一個標準宏MIN,這個宏輸入兩個參數並返回較小的一個?

#definekMIN(X,Y)((X)>(Y))?(Y):(X)

15.簡述應用程式按Home鍵進入後台時的生命週期,以及從後台回到前台時的生命週期?

進入後台生命週期走:

-(void)applicationWillResignActive:(UIApplication*)application;

-(void)applicationDidEnterBackground:(UIApplication*)application;

回到前台生命週期走:

-(void)applicationWillEnterForeground:(UIApplication*)application;

-(void)applicationDidBecomActive:(UIApplication*)application;

16.ViewController的loadView,viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分別是在什麼時候調 用的?在自訂ViewController的時候這幾個函數裡面應該做什麼工作?

loadView:沒有正在使用nib視圖頁面,子類將會建立自己的自訂視圖層

viewDidLoad:試圖被載入後調用

viewWillAppear:試圖即將出現的時候調用

viewDidUnload:當系統記憶體吃緊的時調用,釋放掉當前未在window中顯示的試圖和對應的控制器

17.描述應用程式的啟動順序。

1、main函數建立UIApplication執行個體和UIApplication代理執行個體

2、在UIApplication代理執行個體中重寫啟動方法,設定第一ViewController

3、在第一ViewController中添加控制項,實現對應的程式介面。

18.為什麼寫代理的屬性都是assign而不是retain?請舉例說明。

防止循環參考,

Teacher*teacher=[[Teacheralloc]init];

Student*student=[[Studentalloc]init];t

eacher.delegate=student;

student.delegate=teacher;

在teacher中dealloc會release當前的Delegate,就會觸發student對象release,繼而也會導致student執行dealloc,在student中也會release自己的delegate,產生迴圈了。

19.UIImage初始化一張圖片有幾種方法?簡述各自的優缺點。

兩種:

1、從資源讀取,先在緩衝裡面查看圖片是否存在,沒有的話將圖片添加進緩衝再使用.有的話直接使用緩衝裡的.圖片用的次數比較多,使 用這種方式.缺點是效率低下.UIImage*image=[UIImageimageNamed:@”1.png”];

2.從手機本地讀取,直接加 載圖片.在圖片使用率低的圖片時使用. //讀取本地圖片非resourceNSString*aPath3=[NSStringstringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];[UIImageimageWithContentsOfFile:aPath3]

20.這段代碼有什麼問題嗎:

@implementationPerson

-(void)setAge:(int)newAge{

self.age=newAge;

}

@end

死迴圈

21.用OC寫一個冒泡排序

NSMutableArray *array = [NSMutableArrayarrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];

for (inti =0; i < array.count;i ++) {

for (intj =0; j < array.count-1 - i; j++) {

if([[arrayobjectAtIndex:j]integerValue] > [[arrayobjectAtIndex:j + 1]integerValue]) {

[arrayexchangeObjectAtIndex:jwithObjectAtIndex:j + 1];

}

}

}

NSLog(@"%@",array);

22.簡述你對UIView、UIWindow和CALayer的理解

UIView繼承於UIResponder,而UIResponder繼承於NSObject,可以響應使用者事件。UIView構建介面,用來顯示內容,側重於對內容的管理。

CALayer繼承於NSObject,不能響應事件。側重於對內容的繪製,以及對內容進行動畫處理,依賴於UIView來顯示。

UIWindow是特殊的UIView,通常一個app只有一個UIWindow,我們可以建立一個視圖控制器,並添加到 UIWindow上面,這樣的話這個視圖控制器就是app的第一響應者(First Responder).

23.frame和bounds區別:

frame:view在父視圖座標 中的位置

bounds:view在本地座標中的位置

center:view的中心點在父視圖中的位置

也可仔細閱讀:http://blog.csdn.net/mad1989/article/details/8711697

24.寫一個完整的代理

25.分析json、xml的區別?json、xml解析方式的底層是如何處理的?

XML是擴充通用標記語言(SGML),適合Web傳輸。提供統一的方法來描述和交換資料。

JSON(JavaScriptObjectNotation)一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。可在不同平台之間進行資料交換。

26.ViewController的didReceiveMemoryWarning是在什麼時候被調用的?預設的操作是什麼?

在出現記憶體警告的時候調用,釋放掉暫時沒使用的可重用對象。這個方法不能手動調用!!!

27.物件導向的三大特徵,並作簡單的介紹

封裝、繼承、多態。

封裝:是把客觀事物封裝成抽象的類,隱藏內部的實現,對外部提供介面。

繼承:可以使用現有類的所有功能,並且在無需重新編寫原來的類的情況下對這些功能進行擴充。

多態:不同的對象以自己的方式響應相同的的訊息叫做多態。

28.簡單說一下懶載入

用到的時候初始化,不用的話不初始化只是一個指標,不佔用記憶體空間

29.分別描述類目(categories)和延展(extensions)是什嗎?以及兩者的區別?繼承和類目在實現中有何區別?為什麼Category只能為對象添加方法,卻不能新增成員變數?

category類目:在不知道源碼的情況下為一個類擴充方法,

extension:為一個類聲明私人方法和變數。

繼承是建立了一個新的類。

30.#import、#include和@class有什麼區別

#includeC語言中引入標頭檔,可能出現交叉編譯

#import在OC中引入自己建立的標頭檔

#import””是引入自己建立類的標頭檔

#import<>是引入系統類別的標頭檔

#import不會出現交叉編譯

@class對一個類進行聲明,告訴編譯器有這個類,但是類的定義什麼的都不知道.

31.談談你對MVC的理解?為什麼要用MVC?在Cocoa中MVC是怎麼實現的?你還熟悉其他的OC設計模式或別的設計模式嗎?

MVC是Model-VIew-Controller模型-視圖-控制器。 model資料模型,view是對這些資料的顯 示,viewcontroller就是把model拿到view中顯示,起到model和view之間橋樑的作用。MVC可以實現程式最大程 度的可重用性。MVC各元素分開也能便於代碼的更新、維護以及提高代碼的重用性.

單例模式,delegate設計模式,target-action設計模式

32.字串替換方法:

[stringstringByReplacingOccurrencesOfString:@"png"withString:@""]

33.對於語句NSString*testObject=[[NSDataalloc]init]; testObject在編譯時間和運行時分別是什麼類型的對象?

編譯的時候是NSString類型,啟動並執行時候是NSData類型

34.什麼是沙箱(sandbox)?沙箱包含哪些檔案,描述每個檔案的使用情境。如何擷取這些檔案的路徑?如何擷取應用程式套件組合中檔案的路徑?

iOS應用程式只能在為該程式建立的檔案系統中讀取文 件,不可以去其它地方訪問,此地區就是沙箱,用來儲存所有的非代碼檔案。(例像,表徵圖,聲音,映像,屬性列表,文字檔等。)

預設每個沙箱有3個檔案夾:Documents,Library和tmp。

Documents:儲存程式中建立的或在程式中瀏覽到的檔案資料

iTunes備份和恢複的時候會包括此目錄

Library/Caches:存放快取檔案,iTunes不會備份此目錄,目錄下檔案在應用退出時不刪除

tmp:提供一個即時建立臨時檔案的地方。

iTunes在與iPhone同步時,備份所有的Documents和Library檔案。

iPhone在重啟時,會丟棄所有的tmp檔案。

35.isKindOfClass、isMemberOfClass作用分別是什嗎?

-(BOOL)isKindOfClass:classObj判斷是否是這個類或者是這個類子類的執行個體

-(BOOL)isMemberOfClass:classObj判斷是否是這個類的執行個體

36.iOS中UIViewController的生命週期及iOS程式執行順序:

視圖控制對象生命週期

init-初始化程式

viewDidLoad-載入視圖

viewWillAppear-UIViewController對象的視圖即將加入視窗時調用;

viewDidApper-UIViewController對象的視圖已經加入到視窗時調用;

viewWillDisappear-UIViewController對象的視圖即將消失、被覆蓋或是隱藏時調用;

viewDidDisappear-UIViewController對象的視圖已經消失、被覆蓋或是隱藏時調用;

viewVillUnload-當記憶體過低時,需要釋放一些不需要使用的視圖時,即將釋放時調用;

viewDidUnload-當記憶體過低,釋放一些不需要的視圖時調用。

具體可參考:http://blog.csdn.net/huifeidexin_1/article/details/7566226

37. 簡述多線程。

答:Grand Central Dispatch簡稱GCD 解決多核並行運算的一種方案,主要有兩種隊列:並行、串列。

NSOperationQueue以隊列的形式實現了多線程,基於GCD的封裝。

NSThread 輕量級多線程,不常用 缺點:需要自己管理線程的生命週期,線程同步。線程同步對資料的加鎖會有一定的系統開銷

39. 該問題涉及編譯器的“記憶體對齊”問題:

例如:

對於結構體來說,按成員中所佔位元組最大的是float類型,佔用4個位元組,一共有3個成員,所以總的佔用位元組為:4*3=12.可通過編譯器命令來設定: #progmapack(2)

40. TCP/IP 建立串連的過程:

在TCP/IP協議中,TCP協議提供可靠的串連服務,採用三向交握建立串連;

第一次握手:建立串連時,用戶端發送串連請求到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到用戶端串連請求,向用戶端發送允許串連應答,此時伺服器進入SYN_RECV狀態;

第三向交握:用戶端收到伺服器的允許串連應答,向伺服器發送確認,用戶端和伺服器進入通訊狀態,完成三向交握。

(所謂的三向交握,就是要有三次串連資訊的發送、接收過程。TCP串連的建立需要進行三次串連資訊的發送、接收。)

41.什麼是UDP和TCP的區別是什嗎?

TCP 的全稱是傳輸控制通訊協定,這種協議可以提供連線導向的、可靠的、點到點的通訊。

UDP 的全稱是使用者資料包協議。他可以提供非串連的不可靠的點到多點的通訊,是osi參考模型中一種不需連線的傳輸層協議,提供面向事務的簡單的不可靠資訊傳輸,_IETFRFC 768 是UDP 的正式規範;

選擇何種協議,看程式注重那個方面,可靠抑或快速。

42.static關鍵字的作用

靜態全域變數

優點:

1、節省記憶體。靜態變數只儲存一處,但供所有對象使用。

2、它的值是可以更新的。

3、可提高時間效率。只要某個對象對靜態變數更新一次,所有的對象都能訪問更新後的值。

43.iOS系統架構分為幾層,分別是什麼

1、Core OS是核心作業系統層,包括記憶體管理、檔案系統、電源管理以及一些其他的作業系統任務。

2、Core Services是核心服務層,用來訪問iOS的一些服務。

3、Media是媒體層,通過它我們可以在應用程式中使用各種媒體檔案,進行音頻與視頻的錄製,圖形的繪製,以及製作基礎的動畫效果。

4、Cocoa Touch是可觸摸層,本質上來說它負責使用者在iOS裝置上的觸摸互動操作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.