搜狐 2021 iOS工 程師面試題
小編:管理員 612閱讀 2021.10.09
單選題
1、以下哪一段代碼不會拋出異常()
A、NSArray *array=@[1,2,3];NSNumber * number=array[3];
B、NSDictionary *dict=@{@"key":nil};
C、NSString *str=nil;NSString *str2=[str substringFromIndex:3];
D、NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];
1、C
A:OC數組中的元素不能是基本數據類型,必須是對象,并且array[3]下標越界,Xcode編譯時報錯
B:字典中鍵值對不能為nil,運行時崩潰
C:OC中向空對象發送消息,不執行任何操作,不報錯,不崩潰
D:數組下標越界,運行時崩潰
第2題:
2、delegate中的property使用以下哪個屬性()
A、assign
B、retain
C、copy
D、strong
2、A
delegate中文叫做委托,通常會用在class內部把一些事件處理"委托"給別人去完成。
為什么我們不用retain而要用assign呢?
原因就是在于iOS的reference counting的環境中,我們必須解決circular count的問題。
第3題:
3、C和Objective-C的混合使用,以下描述錯誤的是()
A、cpp文件只能使用C/C++代碼
B、cpp文件include的頭文件中,可以出現objective-C的代碼
C、mm文件中混用cpp直接使用即可
D、cpp使用objective-C的關鍵是使用接口,而不能直接使用代碼
3、B
obj-c 的編譯器處理后綴為 m 的文件時,可以識別 obj-c 和 c 的代碼,處理 mm 文件可以識別 obj-c,c,c++ 代碼,但 cpp 文件必須只能用 c/c++ 代碼,而且 cpp 文件 include 的頭文件中,也不能出現 obj-c 的代碼,因為 cpp 只是 cpp
第4題:
4、關于Objective-C中屬性的說明,以下錯誤的是()
A、readwrite是可讀可寫特性,需要生成getter方法和setter方法
B、readonly是只讀特性,只有getter方法,沒有setter方法
C、assign是賦值屬性,setter方法將傳入參數賦值給實例變量
D、retain表示持有特性,copy屬性表示拷貝屬性,都會建立一個相同的對象
4、D
Copy是創建一個新對象,Retain是創建一個指針,引用對象計數加1。
Copy屬性表示兩個對象內容相同,新的對象retain為1 ,與舊有對象的引用計數無關,舊有對象沒有變化。copy減少對象對上下文的依賴。
Retain屬性表示兩個對象地址相同(建立一個指針,指針拷貝),內容相同,這個對象的retain值+1也就是說,retain 是指針拷貝,copy 是內容拷貝
第5題:
5、下面關于線程管理錯誤的是()
A、GCD在后端管理著一個線程池
B、NSOperationQueue是對NSthread的更高層的封裝
C、NSThread需要自己管理線程的生命周期
D、GCD可以根據不同優先級分配線程
5、B
B是錯的,SOperationQueue是對GCD的更高層的封裝
C是對的。
// 初始化線程
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
// 設置線程的優先級(0.0 - 1.0,1.0最高級)
thread.threadPriority = 1;
// 開啟線程
[thread start];
第6題:
6、在沒有navigationController的情況下,要從一個ViweController切換到另一個ViewController應該()
A、{self navigationController pushViewController:nextViewController animated:YES};
B、{self view addSubview:nextViewController.view};
C、{self presentModalViewController:nextViewController animated:YES};
D、{self pushViewController:nextViewController animated:YES};
6、C
A是navigationController包裹下的控制器才使用的跳轉,不符合題意
B是加載一個控制器的view,也是錯的
C是IOS中的模態切換,符合題意,所以C是正確答案
D明顯就是錯誤的
第7題:
7、下面對category描述不正確的是()
A、category可以添加新的方法
B、category可以刪除修改之前的方法
C、將類的實現分散到多個不同文件或多個不同框架中
D、創建對私有方法的前向引用
7、B
類別是一種為現有的類添加新方法的方式。利用Objective-C的動態運行時分配機制,Category提供了一種比繼承(inheritance)更為簡潔的方法來對class進行擴展,無需創建對象類的子類就能為現有的類添加新方法,可以為任何已經存在的 class 添加方法,包括那些沒有源代碼的類(如某些框架類),但不能刪除修改之前的方法。
類別主要有3個作用:
(1)可以將類的實現分散 到多個不同文件或多個不同框架中,方便代碼管理。也可以對框架提供類的擴展(沒有源碼,不能修改)。
(2)創建對私有方法的前向引用:如果其他類中的方法未實現,在你訪問其他類的私有方法時編譯器報錯這時使用類別,在類別中聲明這些方法(不必提供方法實現),編譯器就不會再產生警告
(3)向對象添加非正式協議:創建一個NSObject的類別稱為“創建一個非正式協議”,因為可以作為任何類的委托對象使用。
第8題:
8、iOS中的數據持久化方式()
A、屬性列表
B、對象歸檔
C、SQLite和CoreData
D、以上全部
8、D
IOS中的數據持久化方式,基本上有以下四種:屬性列表、對象歸檔、SQLite3和Core Data
屬性列表
涉及到的主要類:NSUserDefaults,用于存儲配置信息
SQLite:用于存儲查詢需求較多的數據
CoreData:用于規劃應用中的對象,Core Data本質上是使用SQLite保存數據,但是它不需要編寫任何SQL語句。
對象歸檔:使要使用對象歸檔,對象必須實現NSCoding協議.大部分Object C對象都符合NSCoding協議,也可以在自定義對象中實現NSCoding協議,用基本對象類型定制的個性化緩存方案
第9題:
9、NSRunLoop的以下描述錯誤的是()
A、Runloop并不是由系統自動控制的
B、有3類對象可以被run loop監控:sources,timers,observers
C、線程是默認啟動run loop的
D、NSTimer可手動添加到新建的NSRunLoop中
9、C
A:Runloop的作用在于當有事情要做時它使當前的thread工作,沒有事情做時又使thread 休眠sleep。Runloop并不是由系統自動控制的,尤其是對那些新建的次線程需要對其進行顯示的控制。
B:有3類對象可以被run loop監控:sources、timers、observers。當這些對象需要處理的時候,為了接收回調,首先必須通過 CFRunLoopAddSource ,CFRunLoopAddTimer 或者 CFRunLoopAddObserver 把這些對象放入run loop。 要停止接收它的回調,可以通過CFRunLoopRemoveSource從run loop中移除某個對象。
C:每一個線程都有自己的runloop, 主線程是默認開啟的,創建的子線程要手動開啟,因為NSApplication 只啟動main applicaiton thread。
D:NSTimer默認添加到當前NSRunLoop中,也可以手動制定添加到自己新建的NSRunLoop的中。
相關推薦
- 騰訊 2021年移動客戶端開發面試題 第1題: 一、不定項選擇(iOS開發選做)實現多線程都有哪幾種方法? A 使用@synchronized(self)B 使用GCDC 使用NSOperationQueueD 使用@thread答案:A B C第2題: Intent傳遞數據時,下列的數據類型哪些可以被傳遞 A SerializableB charsequenceC Parc…
- 搜狐 2021 編輯面試題 第1題:業界常說的宏觀經濟“三駕馬車”是指哪三個:( )A、GDP 進口 出口 B、投資 消費 出口C、CPI 內需 外匯儲備 D、GDP CPI 外匯儲備 第2題:國際通行的衡量和監測商業銀行抵御風險的能力指標是:( )A、存款準備金率 B、資本充…
- 2021年蜂鳥眾包回爐考試題大全,附上答案 想做蜂鳥眾包外賣員的朋友,在入職之前一定有面臨著這樣的問題,那就是面試官叫你考試。而在掃描之后,面對眾包回爐考試的題目時,你可能會頓時蒙圈,也許考了幾天了,就是過不了。為此,小編為你送上2021年眾包回爐考試大全25道題以及真實答案,以下就是:湛江…