iOS開發面試高頻題

來源:互聯網
上載者:User

標籤:

iOS開發面試高頻題,面試不再懵逼目錄 前端技術2016年5月4日

對於要面試iOS開發的同學,可能已經看了很多的面試題。但是網上很多的面試題有些很全,但是沒有重點,有些又太少。今天小編給大家整理了一些比較重要和經常問的面試題,總共20個,半小時之內就可以看完。

1. Object-c的類可以多重繼承麼?可以實現多個介面麼?Category是什麼?重寫一個類的方式用繼承好還是分類好?為什麼?

答: Object-c的類不可以多重繼承;可以實現多個介面,通過實現多個介面可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關係。

2. #import 跟#include 又什麼區別,@class呢, #import<> 跟 #import””又什麼區別?

答:#import是Objective-C匯入標頭檔的關鍵字,#include是C/C++匯入標頭檔的關鍵字,使用#import標頭檔會自動只匯入一次,不會重複匯入,相當於#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,才去查看類的實現檔案,可以解決標頭檔的相互包含;#import<>用來包含系統的標頭檔,#import””用來包含使用者標頭檔。

3. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什麼作用,在那種情況下用?

答:

1). readwrite 是可讀可寫特性;需要產生getter方法和setter方法時

2). readonly 是唯讀特性 只會產生getter方法 不會產生setter方法 ;不希望屬性在類外改變

3). assign 是賦值特性,setter方法將傳入參數賦值給執行個體變數;僅設定變數時;

4). retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;

5). copy 表示賦值特性,setter方法將傳入對象複製一份;需要完全一份新的變數時。

6).nonatomic 非原子操作,決定編譯器產生的setter getter是否是原子操作,atomic表示多安全執行緒,一般使用nonatomic

4.對於語句NSString*obj = [[NSData alloc] init]; obj在編譯時間和運行時分別時什麼類型的對象?

答: 編譯時間是NSString的類型;運行時是NSData類型的對象

5.常見的object-c的資料類型有那些, 和C的基礎資料型別 (Elementary Data Type)有什麼區別?如:NSInteger和int

答:object-c的資料類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,建立後便是對象,而C語言的基礎資料型別 (Elementary Data Type)int,只是一定位元組的記憶體空間,用於存放數值;NSInteger是基礎資料型別 (Elementary Data Type),並不是NSNumber的子類,當然也不是NSObject的子類。NSInteger是基礎資料型別 (Elementary Data Type)Int或者Long的別名(NSInteger的定義typedef long NSInteger),它的區別在於,NSInteger會根據系統是32位還是64位來決定是本身是int還是Long。

6.id 聲明的對象有什麼特性?

答:Id 聲明的對象具有運行時的特性,即可以指向任意類型的objcetive-c的對象;

7. 原子(atomic)跟非原子(non-atomic)屬性有什麼區別?

答:

1). atomic提供多安全執行緒。是防止在寫未完成的時候被另外一個線程讀取,造成資料錯誤

2). non-atomic:在自己管理記憶體的環境中,解析的訪問器保留並自動釋放返回的值,如果指定了 nonatomic ,那麼訪問器只是簡單地返回這個值。

8. 記憶體管理的幾條原則時什麼?按照預設法則.那些關鍵字產生的對象需要手動釋放?在和property結合的時候怎樣有效避免記憶體泄露?

答:誰申請,誰釋放

遵循Cocoa Touch的使用原則;

記憶體管理主要要避免“過早釋放”和“記憶體流失”,對於“過早釋放”需要注意@property設定特性時,一定要用對特性關鍵字,對於“記憶體流失”,一定要申請了要負責釋放,要細心。

關鍵字alloc 或new 產生的對象需要手動釋放;

設定正確的property屬性,對於retain需要在合適的地方釋放,

9.如何對iOS裝置進行效能測試?

答: Profile-> Instruments ->Time Profiler

10. Object C中建立線程的方法是什麼?如果在主線程中執行代碼,方法是什麼?如果想延時執行代碼、方法又是什麼?

答:線程建立有三種方法:使用NSThread建立、使用GCD的dispatch、使用子類化的NSOperation,然後將其加入NSOperationQueue;在主線程執行代碼,方法是performSelectorOnMainThread,如果想延時執行代碼可以用performSelector:onThread:withObject:waitUntilDone:

11 淺複製和深複製的區別?

答:淺層複製:只複製指向對象的指標,而不複製引用對象本身。

深層複製:複製引用對象本身。

意思就是說我有個A對象,複製一份後得到A_copy對象後,對於淺複製來說,A和A_copy指向的是同一個記憶體資源,複製的只不過是是一個指標,對象本身資源

還是只有一份,那如果我們對A_copy執行了修改操作,那麼發現A引用的對象同樣被修改,這其實違背了我們複製拷貝的一個思想。深複製就好理解了,記憶體中存在了

兩份獨立對象本身。

用網上一哥們通俗的話將就是:

淺複製好比你和你的影子,你完蛋,你的影子也完蛋

深複製好比你和你的複製人,你完蛋,你的複製人還活著。

12. 類別的作用?繼承和類別在實現中有何區別?

答:category 可以在不獲悉,不改變原來代碼的情況下往裡面添加新的方法,只能添加,不能刪除修改,並且如果類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,因為類別具有更高的優先順序。

類別主要有3個作用:

1).將類的實現分散到多個不同檔案或多個不同架構中。

2).建立對私人方法的前向引用。

3).向對象添加非正式協議。

繼承可以增加,修改或者刪除方法,並且可以增加屬性。

13. 類別和類擴充的區別。

答:category和extensions的不同在於 後者可以添加屬性。另外後者添加的方法是必須要實現的。

extensions可以認為是一個私人的Category。

14. 代理的作用?

答:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要擷取到那些類的指標。可以減少架構複雜度。

另外一點,代理可以理解為java中的回調監聽機制的一種類似。

15. oc中可修改和不可以修改類型。

答:可修改不可修改的集合類。這個我個人簡單理解就是可動態添加修改和不可動態添加修改一樣。

比如NSArray和NSMutableArray。前者在初始化後的記憶體控制項就是固定不可變的,後者可以添加等,可以動態申請新的記憶體空間。

16. OC的記憶體回收機制?

答: OC2.0有Garbage collection,但是iOS平台不提供。

一般我們瞭解的objective-c對於記憶體管理都是手動操作的,但是也有自動釋放池。

但是差了大部分資料,貌似不要和arc機制搞混就好了。

17. 什麼是消極式載入?

答:懶漢模式,只在用到的時候才去初始化。

也可以理解成延時載入。

我覺得最好也最簡單的一個列子就是tableView中圖片的載入顯示了。

一個延時載,避免記憶體過高,一個非同步載入,避免線程堵塞。

18. 什麼時候使用NSMutableArray,什麼時候使用NSArray?

答:當數組在程式運行時,需要不斷變化的,使用NSMutableArray,當數組在初始化後,便不再改變的,使用NSArray。需要指出的是,使用NSArray只表明的是該數組在運行時不發生改變,即不能往NSAarry的數組裡新增和刪除元素,但不表明其數組內的元素的內容不能發生改變。NSArray是安全執行緒的,NSMutableArray不是安全執行緒的,多線程使用到NSMutableArray需要注意。

19. 類NSObject的那些方法經常被使用?

答:NSObject是Objetive-C的基類,其由NSObject類及一系列協議構成。

其中類方法alloc、class、 description 對象方法init、dealloc、– performSelector:withObject:afterDelay:等經常被使用

20. 在iPhone應用中如何儲存資料?

答:有以下幾種儲存機制:

1).通過web服務,儲存在伺服器上

2).通過NSCoder固化機制,將對象儲存在檔案中

3).通過SQlite或CoreData儲存在檔案資料庫中

面試前看看面試題雖然能助你一臂之力,但是最重要的還是平時要紮紮實實的提升自己的技術能力。小麥祝大家都能夠找到一個好的工作,對得起自己的努力。

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.