国产激情久久久久久有声小说_变态拳头交视频一区二区_国产超91_国产AV巨作情欲放纵无码_日韩中文字幕一区二区在线视频_深夜视频在线

好獵頭網-中高級人才獵頭網站!服務熱線:400-1801-668 好獵頭   |   登錄 注冊

iOS工程師面試筆試題

添加時間:2018-04-12 10:49:28
瀏覽次數: 0
前言:以下iOS工程師面試筆試題,部分來源于網絡,筆者在此處收集起來,既是要鞏固自我,也希望能夠幫助到同樣需要的人!參考答案均為筆者所寫,其有疑問或者出錯之處,請在評論中提出,謝謝!不喜勿噴!

1. #import和#include的區別?

參考答案:

#import是Objective-C導入頭文件的語法,可保證不會重復導入。
#include是C/C++導入頭文件的語法,如果是Objective-C與C/C++混編碼,對于C/C++類型的文件,還是使用#include來引入,這種寫法需要添加防重復導入的語法。

2. @class的作用

參考答案:

@class一般用于頭文件中通過前向聲明,就可以聲明了,但是在.m文件中還是需要使用#import進來的。它的作用只是前向聲明。

3. 用NSLog函數輸出一個浮點類型,結果四舍五入,并保留一位小數

參考答案:

float money = 1.011;
NSLog(@"%.1f", money);

使用%f來格式化,其中要保留一位小數,因此再用%.1f就是保留一位。

4.property屬性的修飾符有什么樣的作用

參考答案:

property是屬性訪問聲明,擴號內支持以下幾個屬性:
getter=getName、setter=setName:設置setter與getter的方法名
readwrite、readonly:設置可供訪問級別
assign:方法直接賦值,不進行任何retain操作,為了解決原類型與環循引用問題
retain:其setter方法對參數進行release舊值再retain新值,所有實現都是這個順序
copy:其setter方法進行copy操作,與retain處理流程一樣,先對舊值release,再copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。
nonatomic:非原子性訪問,不加同步, 多線程并發訪問會提高性能。注意,如果不加此屬性,則默認是兩個訪問方法都為原子型事務訪問。

5. self.name=@object和name=@object有什么不同?

參考答案:

self.name =”object”:會調用對象的setName()方法;name = “object”:會直接把"object"字符串賦值給當前對象的name屬性。

6. viewDidLoad、loadView和viewDidUnload何時調用

參考答案:

viewDidLoad在view加載完成時調用,loadView在controller的view為nil時調用。對于viewDidUnload現在已經不能直接調用了。

7. objective-c中的可變與不可變詞典

參考答案:

可變字典就是可以增、刪、改操作的字典,對應于NSMutableDictionary類型。
不可變字典就是不能執行增、刪、改操作的字典,對應于NSDictionary類型。

8.Objective-C的內存管理

參考答案:?

現在內存管理幾乎都采用ARC,也就是Automatic Reference Counting,意思是自動引用計數。由編譯器在編譯時自動為添加retain、release等代碼。

如果問的MRC,也就是Manual Reference Counting,意思是手動內存管理。

黃金法則:誰使對象的引用計數+1,不再使用該對象時,誰就應該使該對象的引用計數-1。

9. 自動生成getter/setter方法

參考答案:

對于以前的代碼,那時還沒有property,使用這樣的方法來創建:

- (void)setName:(NSString *)aName;
- (NSString *)name;

在后面有了property,直接使用@property (nonatomic, copy) NSString *name這樣的方法來聲明,編譯器會自動生成getter/setter方法并生成一個_name成員變量。

10. 什么是MVC

參考答案:

我相信大部分人在被問到這個問題時,都會回答M就是Model,V就是View,C就是Controller。這都是停留在概念上的回答,明顯沒有什么工作經驗。對于一個對框架和架構有一定的思想的人,回答時會從項目的耦合度、團隊開發如何減少沖突、如何降低團隊與團隊之間的溝通成本、如何將M、V、C之間按照既定的標準建立溝通的橋梁。

Model用于處理數據,通常來說,Model中會包含多個字段,用于存儲數據。但是,Model還會有一部分邏輯,比如說:

@interface TestModel: HYBBaseModel?
?// 這個是接口返回的字段,1表示XXX,2表示YYY,3表示ZZZ
@property (nonatomic, assign) NSUInteger type;?
// 這個不是接口返回的字段,但是由于`type`字段是一個數值,不是`view`需要顯示的數據
// 所以我們最好將邏輯統一放到這里來,外部只管獲取最終顯示需要的值即可。即使哪天接口
// 返回的字段變化或者增加什么新的值,只需要處理這個模型內部就好了。?
@property (nonatomic, copy, readonly) NSString relationship;
@end

對于View,不應該包含邏輯,應該根據模型直接獲取數據。

對于Controller,大部分交互邏輯都集中到了這里,所有View需要的數據,都是通過Controller提取Model然后交給view去顯示數據。

11. 重寫getter/setter方法

假設聲明屬性:

@property (nonatomic, copy) NSString *blogName;
重寫這個屬性的getter/setter方法:

參考答案:

這里一旦連getter方法也重寫,編譯器不會給我們自動生成成員變量_blogName,因此我們需要在類的聲明中添加一個成員變量_blogName:

@interface Demo () {
? ?NSString *_blogName;
}
?@end

在自動內存管理下(ARC):

- (void)setBlogName:(NSString *)aName {
? ?if (_blogName != aName) {
? ? ? _blogName = nil;
? ? ? _blogName = [aName copy];
? ?}
}
- (NSString *)blogName {
? return _blogName;
}
對于手動內存管理(MRC):
- (void)setBlogName:(NSString *)aName {
? ?if (_blogName != aName) {
? ? ? [_blogName release];
? ? ? _blogName = nil;
? ? ? _blogName = [aName copy];
? ?}
}
- (NSString *)blogName {
? return _blogName;
}


12. obj在編譯時和運行時分別時什么類型的對象

如下面的代碼,obj在編譯時和運行時分別時什么類型的對象:
NSString *obj = [[NSData alloc] init];

參考答案:

在編譯時,我們所聲明的obj是NSString *類型,因此是NSString類型對象。在運行時,由于指針obj所指向的是NSData類型對象的內存,因此實際上是NSData類型的對象。在編譯時,這一行代碼會轉換成類似這樣:

NSString *obj = ((id (*)(id, SEL))objc_msgSend)([NSData class], @selector(alloc));
obj = ((id (*)(id, SEL))objc_msgSend)((id)obj, @selector(init));

由于在編譯時,轉換成id,因此可以用NSString *指向NSData對象,而id是具備運行時特性的,因此在鏈接時,通過id的isa指針可以找到其所屬的類,因此最終類型還是通過isa確定其所屬類型。

13. id聲明的對象有什么特性?

id類型可以指向任何類型的對象。

參考答案:
我們先看看其定義:

/// Represents an instance of a class.
struct objc_object {
? ? Class isa ?OBJC_ISA_AVAILABILITY;
};
/// A pointer to an instance of a class.
typedef struct objc_object *id;

可其定義可知id類型是一個指向objc_object結構體類型的指針,這個結構體只有一個指向對象無類的指針isa,因此id可以指向任何類型的對象,故其具備運行時特性。

14. iOS設備性能測試

在實際開發中,我們經常需要對應用瘦身,因此對性能的檢測是很重要的。

參考答案:
使用Profile-> Instruments ->Time Profiler可以檢測性能。

15. Objective-C中有私有方法、私有變量么?

我記得曾經我就被這么問過,不知道大家有沒有遇到過。

參考答案:

在類的.m實現文件內聲明,就可以作為私有方法、私有變量。但是,并不是絕對的私有,如果外部知道有這么個方法,一樣可以調用,而且不會報錯。就像蘋果公司沒有公開出來的API,只要我們通過其它方式了解到api就可以調用。于是蘋果審核時經常由于使用了私有api而打回來了。

16. 簡述tableview的重用機制

曾經筆者面試時,也被問到這個問題。

參考答案:?
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]

?這個方法就是重用機制的核心了。比如,有一個界面可顯示10個cell,那么創建10次cell,并給cell指定同樣的重用標識(當然,可以為不同顯示類型的cell指定不同的標識)并且10個cell將全部都加入到visiableCells數組,reusableTableCells為空.

滾動tableView,當有一個cell完全移出屏幕時,這個cell就會被加入到reusableTableCells。而新出現的那個cell將加入到visiableCells,而這個cell就是被重用的。
如果要讓tableview不重用,不設置reuseIdentifier就可以了。

17. nil與NULL的區別

參考答案:

nil和C語言的NULL相同,在objc/objc.h中定義。nil表示Objective-C對象的值為空。在C語言中,指針的空值用NULL表示。在Objective-C中,nil對象調用任何方法表示什么也不執行,也不會崩潰。

18. Category是什么,何時使用?

參考答案:

Category就是所謂的擴展。

有時我們需要在一個已經定義好的類中增加一些方法,而不想去重寫該類,這時候使用擴展就很好。比如,當工程已經很大,代碼量比較多,或者類中已經有很多方法,已經有其他代碼調用了該類創建對象并使用該類的方法時,可以使用類別對該類擴充新的方法。

筆者所到公司之處,都會根據公司的UI風格定制一套UI組件,統一全局的風格。本人向來不喜歡用xib/storyboard開發,因為維護成本太高了。我們不能通過繼承的方式定制各種組件吧?所以這個時候使用擴展是最佳時期.

19. 什么是Delegate?常用場景?

參考答案:

Delegate就是所謂的代理,代理是一種設計模式。在iOS開發中,會使用到大量的代理,而代理設計模式是蘋果中的標準設置模式。

常用場景有反向傳值。比如:蘋果的藍牙,我們進入到下一個界面去打開或者關閉藍牙,當操作之后需要將狀態反饋到前一個界面,并更新顯示。對于這種狀態,使用代理設計模式是很標準的模式。

20. 什么是單例,如何設計單例?

參考答案:

單例就是全局都只有一個對象存在,而且是在整個App運行過程中都存在。每個App都會有單例,比如UIApplication。而我們在做用戶數據存儲時,通常都會用單例存儲,因為應用在所有操作中,經常要求先登錄。

下面這種寫法是最常用的寫法,這個是線程安全的。

+ (instancetype)shared {
? static HYBUserManager *sg_userManager = nil;
? static dispatch_once_t onceToken;
? dispatch_once(&onceToken, ^{
? ? if (sg_userManager == nil) {
? ? ? sg_userManager = [[HYBUserManager alloc] init];
? ? }
? });
? return sg_userManager;
}

21. 什么是通知?

參考答案:

在iOS中,通知是非常常用的設計模式。它是多對多的關系。關于通知,由于這一節比較重要,單獨寫成一篇文章,后續發出!
主站蜘蛛池模板: 成人在线观看h_亚洲久久在线_91九色福利_日韩av一区在线_日本又黄又爽gif动态图_人人综合_67194成l人在线观看_日本精品久久久 | 国产a∨国片精品jk制服_亚洲大片免费_欧美视频在线观看不卡_大陆av在线_91一区二区国产_136fldh福利免费视频观看_伊人91在线_又黄又爽又色又刺激的视频 | A天堂最新版在线中文_亚洲永久免费视频_精品一区二区三人妻视频_丁香五月网久久综合_网站一级片_男人用嘴添女人私密视频软件_久久不射国产精品_国产精品久久久久99 | 国产美女自拍视频_欧美熟妇另类久久久久久多毛_波多野结衣免费一区视频_日韩国产高清在线观看_制服丝袜人妻中文字幕在线_日本成人一二三区_火之迷恋三级无删减视频_69视频污 | 日韩欧美国产精品_巴中文旅集团_粉嫩蜜桃麻豆免费大片_久久久精品久久日韩一区_久久久久久久久久爱_男女爽爽午夜18污污影院_亚州欧美精品_婷婷久久香蕉五月综合加勒比 | 国产另类精品_a级高清免费毛片av播放_日韩午夜在线视频_538任你躁精品视频网免费_久草福利资源在线_福利一区福利二区_乡下农村一级毛片_99久热在线精品视频成人一区 | 日本人真人姓交大视频_www精品视频_91看片网页_国产一级美女_三级男人添奶爽爽爽视频_av在线中文在线_海绵宝宝英文版双语字幕在线观看_色人在线 | 日韩二区在线播放_99久久免费精品高清特色大片_久久欧美精品_麻豆一区二区在线_欧美综合久久_久久综合亚洲色1080P_日韩字幕在线_国产a级一级 18禁男女无遮挡啪啪网站_黄色a级免费观看_奇米成人av国产一区二区三区_插插综合视频_国产成人麻豆亚洲综合无码精品_国产免费一区二区三区四在线播放_免费播放黄色_午夜在线视频播放 | 色噜噜久久综合伊人一本_伊人久久丁香色婷婷啪啪_久久狠狠爱亚洲综合影院_日韩一级免费观看_日本内射FREERAPE视频_国产欧美一区二区精品秋霞影院_亚洲一区国产二区_中文字幕一二三综合a | 亚洲午夜视频在线观看_欧美日本免费一区二区三区_99久久99这里只有免费费精品_色婷婷美国农夫综合激情亚洲_仁科百华av解禁在线播放_精品欧美一区二区精品久久久_99久久精品视频免费_www.youjizz.com中国 | 色综合伊人色综合网站_国产久草在线观看_国产一级α片_久久久视频精品_日本xxxx娇小_亚洲精品v日韩精品_特级欧美牲交a欧美在线_特黄特色的大片观看免费视频 | 91亚洲免费视频_国产精品人妻一区二区网站_亚洲中文字幕无码一区二区三区_性欧美XXXXX极品少妇_国产精品一区免费在线观看_一级做a爱片_在线视频一区二区三区三区不卡_激情综合婷婷丁香五月俺来也 | 日本少妇乱xxxxx_国产XXXXX在线观看_韩国一级免费毛片_91精品影视_色婷婷一区二区_日韩在线一区二区_免费av网址在线观看_av在线日 | 日韩经典精品无码一区_亚洲www色_久久99久久精品久久久久久_色偷偷888欧美精品久久久_日韩成人无码一区二区三区_国产99re_国产综合影院_一区二区三区免费视频观看 | 欧洲免费看片尺码大_高清无码爆乳系列_亚洲福利片_chinese东北嫖妓女hd_国内精品久久久久精品97感谢的访问_xxxx国产_日日干日日摸_亚洲欧美日韩V在线播放 | 黑人巨茎精品欧美一区二区_小情侣高清国产在线播放_亚洲区欧美区综合区自拍区_视频一区中文字幕_超碰caoporn久久_亚洲AV成人无码网站在线_国产精品丝袜高跟鞋_九一精品在线观看 | 国产淫片_中文在线一区二区_精品一区二区免费_日韩在线激情视频_亚洲色婷婷久久精品AV蜜桃_草草影院ccyycom_欧美日韩视频免费看_出租屋勾搭老熟妇啪啪 | 超高清日韩aⅴ大片美女图片_天天碰天天操视频_亚洲色欲色欲色欲www_久久丫精品国产亚洲AV不卡_久久天天躁狠狠躁夜夜av不卡_欧美av在线播放_国产美女裸露免费看视频_www.国产成人 | 色综合狠狠爱_国产精品又又酱在线午夜_野外少妇愉情中文字幕_在线观看国产精品一区二区_开心五月综合亚洲_一本久久a久久精品亚洲_成人免费在线网_国产精品人妻熟女毛片av久久 | av大片免费在线观看_精品熟人一区二区三区四区_热久久久久久久_日本一二三区在线_日日噜噜噜夜夜爽爽狠狠照片_成年免费A级毛片无码_色5月婷婷丁香六月_国产激情欧美 | japanese55丰满熟妇_亚洲at在线免费影院_亚洲成人自拍一区_国产日韩亚洲精品_日本中文字幕在_日本草草影院_www.91亚洲_野性狂欢大派对 | 97热久久_91视频合集_在线免费亚洲视频_日本高清色www在线安全_久久久网站av_999精品在线观看视频_91精品国产综合久久香蕉922_国产第一页在线观看 | 午夜影院黄色片_日本aⅴ_午夜免费1000部_在线观看免费成人av_一个人免费观看在线视频www_一级做a爰片久久毛片_亚洲国产中文在线视频_国产亚洲精品线观看动态图 | 亚洲永久精品一区_亚洲精品永久免费_一本大道伊人久久综合_国产精品99久久99久久久动漫_亚洲七久久之综合七久久_超碰网站在线观看_日日日视频_成人做受黄大片 | 青苹果乐园高清免费播放_国产午夜亚洲精品一区_成人做爰A片免费看视频暗夜_国产亚洲精久久久久久_亚洲成a人片_日本成本人片视频免费_亚洲午夜无码久久久久小说_男女a级毛片 | 国产精品无打码在线播放_丰满少妇伦精品无码专区_亚洲综合成人一区_亚洲性猛交xxxx_全黄H全肉边做边吃奶视频_久久久久99精品成人片风流寡妇_91免费大片_欧美老妇激情BBBWWBBW | 国产午夜精品一区二区三区软件_国产精品视频久久久久_精品国产区在线_亚洲精品成人av在线_一级免费黄色片_久久久不雅视频_日韩啪啪小视频_超碰人人舔 | 狠狠爱亚洲五月婷婷av_毛茸茸性XXXX毛茸茸毛茸茸_午夜精品久久久99热福利_国产日韩高清一区二区三区在线_一区二区麻豆_性无码免费一区二区三区屯线_免费观看9x视频网站在线观看_私人成片免费观看 | 啪啪免费网站_婷婷色婷婷开心五月_亚洲人久久久_午夜香蕉成视频人网站_亚洲一线产区二线产区区别在_国产成人综合亚洲看片_成人性色生活片免费看_亚洲国产欧美人成 | www.com草逼_视频在线观看亚洲_麻豆传媒影院_久草这里只有精品_九九99靖品_亚洲1区1区3区4区产品乱码芒果_狠狠色狠狠色综合日日小蛇_亚洲欧美中文日韩在线v日本 | 人与人videosfree另类_伊人色综合久久天天人手人婷_色欲AV综合AV无码AⅤ_人人爽亚洲AV人人爽AV人人片_两个少妇给我口爆_天天做天天爱天天爽天天综合_国产精品av久久久久久无_亚洲人成久久 | 超国产女人高潮a片免费视频_91免费视频播放_狠狠综合久久综合88亚洲爱文_国产精品久久人妻无码免费看_www.com色_少妇借种高潮了_久久久久亚洲AV成人无码_大尺度吃奶摸下激烈视频 | 兔子先生节目在线观看_gogogo高清在线播放韩国_林ゆな中文字幕一区二区_91精品国产91久久久久久不卡_一二三四影视在线观看免费视频_91亚洲日本aⅴ精品一区二区_成人在线午夜视频_国产在线一区二区三区在线观看 | 欧美日产国产精品_av无码天堂一区二区三区,_欧美精品一区二_国产成人精品免费青青草原_国产精品无码久久AV不卡_亚洲全部视频_在线吸色_日产精品一二三区 | 强行扒开双腿疯狂猛躁3p视频_久久成年网站_一区二区三区中文字幕_免费A片国产毛无码A片牛牛_巨胸喷奶水视频WWW免费网站_99热碰_麻豆视频网_一级黄色毛片免费观看 | 又色又爽又高潮免费视频国产_成人黄色一级视频_无套内谢少妇毛片a片免费_精品视频免费看_在线观看国产区_xxxxx日韩_欧美性XXXXX极品老少_天天逼网 | 最爱高潮全过程免费的视频_日韩免费无码不卡夜夜爽_国产乱子伦一区二区三区国色天香_日日操天天操_中文久久久久久_91欧美激情一区二区三区成人_男男做喘息gv奶白小受动图_国产三及片网站 狠狠搞综合_国产精品欧美亚洲制服_久久久性视频_国产调教性奴在线观看w_狠狠色婷婷久久一区二区三区麻豆_www.青青草_超碰在线资源站_草在线免费观看 | 搞笑一家人韩剧韩语在线看_中文字幕mv在线观看_蜜桃视频在线播放_懂色av一区二区夜夜嗨_夜夜夜网站_欧美性群另类交_久久免费视频网站_亚洲欧美日韩国产精品专区 | 国产精品久久久久影院嫩草_91免费小视频在线观看_jj视频在线播放_97人摸人人澡人人人超一碰_久久精品无码专区免费_黄色av网址大全_亚洲乱色伦图片区小说_97免费人妻无码视频 | 久久精品亚洲一区二区三区_香蕉快播_蜜桃视频一区二区_一区二区不卡视频_成人在线无码_夫の目の前侵犯新婚人妻在线_无码avav无码中文字幕_国产精品一国产精品最新章节 | 午夜精品久久久内射近拍高清_三级久久久久久久久高潮_在线免费观看av网址_免费国产在线观看_日本熟妇中文字幕三级_国产免费让你躁在线视频_奇米视频888_麻豆午夜影院 |