iOS基礎面試題(一)

來源:互聯網
上載者:User

kaikaijia同學私信我,說想加群,我就建個iOS開發群,大家做技術交流和資源,群號:241048287,有興趣的同學可以加群,驗證資訊:iOS+姓名。


iOS面試題系列:

iOS如何面試

iOS基礎面試題(二)

iOS基礎面試題(三)

iOS基礎面試題(四)

隨著iOS平台開發的職位的增加,筆試、面試也越來越有“套路”,這裡我總結了一些面試題,多數是Objective-C的基礎知識,適合於面試新人,答案是我自己答的,不準確的地方,歡迎指出。

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 各是什麼作用,在那種情況下用?

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

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

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

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

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

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

4.寫一個setter方法用於完成@property (nonatomic,retain)NSString *name,寫一個setter方法用於完成@property(nonatomic,copy)NSString *name

- (void) setName:(NSString*) str{[str retain];[name release];name = str;}- (void)setName:(NSString *)str{id t = [str copy];[name release];name = t;}

 

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

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

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

object-c的資料類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,建立後便是對象,而C語言的基礎資料型別 (Elementary Data Type)int,只是一定位元組的記憶體空間,用於存放數值;而object-c的NSNumber包含有父類NSObject的方法和NSNumber自己的方法,可以完成複雜的操作。

 

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

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

 

8.Objective-C如何對記憶體管理的,說說你的看法和解決方案?

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

 

9.記憶體管理的幾條原則時什嗎?按照預設法則.那些關鍵字產生的對象

需要手動釋放?在和property結合的時候怎樣有效避免記憶體泄露?

誰申請,誰釋放

遵循Cocoa Touch的使用原則;

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

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

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

 

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

Profile-> Instruments ->Time Profiler

11.看下面的程式,第一個NSLog會輸出什嗎?這時str的retainCount是多少?第二個和第三個呢? 為什嗎?

=======================================================NSMutableArray* ary = [[NSMutableArray array] retain];NSString *str = [NSString stringWithFormat:@"test"];[strretain];[aryaddObject:str];NSLog(@"%@%d",str,[str retainCount]);[strretain];[strrelease];[strrelease];NSLog(@"%@%d",str,[str retainCount]);[aryremoveAllObjects];NSLog(@"%@%d",str,[str retainCount]);=======================================================

str的retainCount建立+1,retain+1,加入數組自動+1

3

retain+1,release-1,release-1

2

數組刪除所有對象,所有數組內的對象自動-1

1

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

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

13.描述一下iOS SDK中如何?MVC的開發模式

MVC是模型、試圖、控制開發模式,對於iOS SDK,所有的View都是視圖層的,它應該獨立於模型層,由視圖控制層來控制。所有的使用者資料都是模型層,它應該獨立於視圖。所有的ViewController都是控制層,由它負責控制視圖,訪問模型資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.