當前位置:成語大全網 - 新華字典 - iOS面試題有哪些

iOS面試題有哪些

iOS 面試題

1.Object-c的類可以多重繼承麽?可以實現多個接口麽?Category是什麽?重寫壹個類的方式用繼承好還是分類好?為什麽?

答:不可以,可以實現多個接口;category是分類,,壹般情況下分類好,用category重寫只會影響到分類本身,不影響其他類和原有類的關系。

2.#import 跟#include 又什麽區別 #import> 跟 #import""又什麽區別?

答:#import 是oc導入頭文件的關鍵字,#include是c/c++導入頭文件的關鍵字,#import會自動導入壹次,不會重復導入,不會引起交叉編譯,@class告訴編譯器某個類的聲明,當執行是才去查看類的執行文件,當兩個類文件有循環依賴關系(A引用B,B引用A)時,需要用@class,

在interface中引用壹個類,就用@class,它會把這個類作為壹個類型來使用,而在實現這個interface的文件中,如果需要引用這個類的實體變量或者方法之類的,還是需要import這個在@class中聲明的類。

#import>引用系統文件,它用於對系統自帶的頭文件的引用,編譯器會在系統文件目錄下去查找該文件.

#import"":用戶自定義的文件用雙引號引用,編譯器首先會在用戶目錄下查找,然後到安裝目錄中查

2.1重復引用(

ClassA 與 ClassB同時引用了ClassC,不做重復引用處理的時候在ClassD中同時引用ClassA,ClassB編譯會提示對ClassC重復引用的錯誤.

#import解決了這個問題

3.類變量的@protected ,@private,@public,@package聲明各有什麽含義?

答:變量的作用域不同,@protected 該類和所有子類中 的方法可以直接訪問這樣的變量,這是默認的,

@private 該類中的方法可以訪問這樣的變量,子類不可以。

@public除了自己和子類方法外,也可以被其他類或者其他模塊中的方法訪問

@package

4.id 聲明的對象有什麽特性?

答:

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

5.MVC是什麽?有什麽特性?為什麽在iPhone上被廣泛運用?

答:是壹種設計模式,將代碼按照視圖,模型控制器的結構來設計

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

答:nsstring,nsdata

7.什麽是安全釋放?

答:[_instance release],_instance = nil;

8.為什麽有些4.0獨有的objective-c 函數在3.1上運行時會報錯.而4.0獨有的類在3.1上分配內存時不會報錯?分配的結果是什麽?

運行時因為 3.1的sdk 裏沒有對應的函數實現.所以會找不到對應的 @selector 指針. 錯誤.

而分配內存.應該是涉及到類的創建的機制上

9.為什麽4.0獨有的c函數在3.1的機器上運行不會報錯(在沒有調用的情況下?)而4.0獨有的類名在3.1的機器上壹運行就報錯?

10.異常exception 怎麽捕獲?不同的CPU結構上開銷怎樣?C中又什麽類似的方法?

11.property中屬性retain,copy,assgin的含義分別是什麽?有什麽區別?將其轉換成get/set方法怎麽做?有什麽註意事項?

- (void)setInstance:(id)instance{

if (_instance != instance) {

[_instance release];

_instance = [instance retain];

}

}

copy

復制代碼

- (void)setInstance:(id)instance{

if (_instance != instance) {

[_instance release];

_instance = [instance copy];

}

}

assgin

復制代碼

- (void)setInstance:(id)instance{

if (_instance != instance) {

_instance = instance;

}

}

12.委托是什麽?委托的property聲明用什麽屬性?為什麽?

delegate assgin

13.淺拷貝和深拷貝區別是什麽?

答案:淺層復制:只復制指向對象的指針,而不復制引用對象本身。

深層復制:復制引用對象本身。

14.Cocoa中與虛基類的概念麽?怎麽簡潔的實現?

沒有 delegate

15.自動釋放池跟GC有什麽區別?iPhone上有GC麽?[pool release] 和[pool drain]有什麽區別?

沒有GC

16.

1

2

3

4

5

6

7

for(int index = 0; index < 20; index ++){

NSString *tempStr = @”tempStr”;

NSLog(tempStr);

NSNumber *tempNumber = [NSNumber numberWithInt:2];

NSLog(tempNumber);

}

這段代碼有什麽問題.?會不會造成內存泄露(多線程)?在內存緊張的設備上做大循環時自動釋放池是寫在循環內好還是循環外好?為什麽?

17.內存管理的幾條原則時什麽?按照默認法則.那些關鍵字生成的對象需要手動釋放?在和property結合的時候怎樣有效的避免內存泄露?

答:誰申請誰釋放。

18.在壹個對象釋放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove這個對象可能會出現什麽問題?

19.怎樣實現壹個 singleton的類.給出思路。

20.什麽是序列化或者Acrchiving,可以用來做什麽,怎樣與copy結合,原理是什麽?.

21.線程是什麽? 有哪些註意事項.?

22.在iphone上有兩件事情要做,請問是在壹個線程裏按順序做效率高還是兩個線程裏做效率高?為什麽?

23.runloop是什麽?在主線程中的某個函數裏調用了異步函數,怎麽樣block當前線程,且還能響應當前線程的timer事件,touch事件等.

24.ios平臺怎麽做數據的持久化?coredata和sqlite有無必然聯系?coredata是壹個關系型數據庫嗎?

25.闡述壹個nil對象從interface bulider產生,到載入程序運行空間,最後被釋放時所經歷的生命周期.

26.notification是同步還是異步? kvo是同步還是異步?notification是全進程空間的通知嗎?kvo呢?

27.kvc是什麽?kvo是什麽?有什麽特性?

28.響應者鏈是什麽?

29.unix上進程怎麽通信?

30.timer的間隔周期準嗎?為什麽?怎樣實現壹個精準的timer?

31.UIscrollVew用到了什麽設計模式?還能再foundation庫中找到類似的嗎?

32如果要開發壹個類似eclipse的軟件,支持插件結構。且開放給第三方開發。妳會怎樣去設計它?(大概思路)

33.Objective-C如何對內存管理的,說說妳的看法和解決方法?

Objective-C的內存管理主要有三種方式ARC(自動內存計數)、手動內存計數、內存池。

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

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

35.What are KVO and KVC?

答案:kvc:鍵 - 值編碼是壹種間接訪問對象的屬性使用字符串來標識屬性,而不是通過調用存取方法,直接或通過實例變量訪問的機制。

很多情況下可以簡化程序代碼。

kvo:鍵值觀察機制,他提供了觀察某壹屬性變化的方法,極大的簡化了代碼。

具體用看到嗯哼用到過的壹個地方是對於按鈕點擊變化狀態的的監控。

比如我自定義的壹個button

[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];

#pragma mark KVO

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"highlighted"] ) {

[self setNeedsDisplay];

}

}

對於系統是根據keypath去取的到相應的值發生改變,理論上來說是和kvc機制的道理是壹樣的。

對於kvc機制如何通過key尋找到value:

36.Difference between method and selector?

方法和選擇器有何不同?

答案:selector是壹個方法的名字,method是壹個組合體,包含了名字和實現.