iOS面試總結(jié)

前段時(shí)間辭職了,因?yàn)楣镜臍夥帐值膲阂盅槊恚夜緵]有一個(gè)合格的產(chǎn)品經(jīng)理顶吮,沒有明確的產(chǎn)品路線,完全是走一步看一步粪薛,幾乎除了研發(fā)全是副總悴了,而且每此投資人員一來公司,App肯定會(huì)有改動(dòng),當(dāng)然有大有小湃交,每次剛剛做好的東西瞬間就會(huì)改掉熟空,有得時(shí)候一天會(huì)改七八次。在這樣的沒有明確目標(biāo)的公司做一款產(chǎn)品搞莺,我絲毫感覺不到希望息罗,對(duì)公司的理念完全失去了興趣。在這個(gè)公司編程變成了一件枯燥的事情才沧,這根本不是我想要的生活阱当,我不想干了,重要的是失去了感覺和編程的樂趣糜工。(真的是這樣弊添,樂趣的確很重要,喬布斯都這么說)捌木。
知之者不如好之者油坝,好之者不如樂之者。五千年前孔子已經(jīng)道出了成功的境界之所在刨裆,當(dāng)你成為一名樂之者的時(shí)候澈圈,事實(shí)上已經(jīng)把工作當(dāng)成了玩,就像玩游戲打怪升級(jí)一樣帆啃,很有快感和成就感瞬女。當(dāng)你沉浸在一件事情的時(shí)候,你就很容易吧這件事情做好努潘,因?yàn)槟愕呐d趣在這件事情上诽偷,你樂意去完成它,即便有困難疯坤,我想你也樂意去解決报慕。
好的扯得有點(diǎn)遠(yuǎn)了,PS:哪位的公司愿意收留請(qǐng)私信我,下面我來貼出來我面試的時(shí)候遇到的面試題压怠。

第1題
@implementation Son : Father
- (id)init{ self = [super init];
   if (self) {
      NSLog(@"%@", NSStringFromClass([self class]));  
      NSLog(@"%@", NSStringFromClass([super class]));
      NSLog(@"%@",NSStringFromClass(self.superclass));
   }
 return self;
}
@end
//打印結(jié)果就是
Son
Son
Father
我來告訴大家為什么
當(dāng) 發(fā)送 class 消息 時(shí)不管是 self  還是 super 其消息主體依然是  self ,也就是說 self 和 super 指向的 是同一個(gè)對(duì)象眠冈。只是 查找方法的位置 區(qū)別,一個(gè)從本類菌瘫,一個(gè)從本類的超類蜗顽。
一般情況下  class 方法 只有在 根類 NSObject 中定義,極少情況有子類重寫 class 方法雨让,
所以  [self  class] 和 [super class] 都是在 根類中 找方法實(shí)現(xiàn)雇盖, 消息接收主體 又都是 a
如果重寫可能會(huì)不一樣。
自然都打印出  Son 
第2題

UIView宫患、UIWindow和CALayer的聯(lián)系和區(qū)別

UIView負(fù)責(zé)渲染矩形區(qū)域內(nèi)的內(nèi)容,為矩形區(qū)域添加動(dòng)畫,相應(yīng)區(qū)域的觸摸事件,布局, 和管理一個(gè)或多個(gè)子視圖,UIWindow是一個(gè)特殊的UIView,通常在一個(gè)程序中只有一個(gè)UIWindow,但可以手動(dòng)創(chuàng)建多個(gè)添加到程序中
UIWindow主要起三個(gè)作用:
1刊懈、作為容器,包含程序所有要顯示的視圖
2、傳遞觸摸消息到其他的UIView或其他對(duì)象
3娃闲、與UIViewController協(xié)同工作,完成設(shè)備方向旋轉(zhuǎn)的支持
CALayer是繪制內(nèi)容的,不處理事件響應(yīng),與UIView是相互依賴的,依賴于UIView來顯示繪制內(nèi)容,UIView依賴于CALayer來提供內(nèi)容```
######第3題
#import虚汛、@class、#include聯(lián)系和區(qū)別皇帮?
通常引用一個(gè)類有兩種辦法:
一種是通過#import方式引入卷哩;另一種是通過@class引入;
這兩種的方式的區(qū)別在于:
1属拾、#import方式會(huì)包含被引用類的所有信息将谊,包括被引用類的變量和方法;@class方式只是告訴編譯器在A.h文件中 B *b 只是類的聲明渐白,具體這個(gè)類里有什么信息尊浓,這里不需要知道,等實(shí)現(xiàn)文件中真正要用到時(shí)纯衍,才會(huì)真正去查看B類中信息栋齿;
 
2、使用@class方式由于只需要只要被引用類(B類)的名稱就可以了襟诸,而在實(shí)現(xiàn)類由于要用到被引用類中的實(shí)體變量和方法瓦堵,所以需要使用#importl來包含被引用類的頭文件;
 
3歌亲、通過上面2點(diǎn)也很容易知道在編譯效率上菇用,如果有上百個(gè)頭文件都#import了同一 個(gè)文件,或者這些文件依次被#improt(A->B, B->C,C->D…),一旦最開始的頭文件稍有改動(dòng)陷揪,后面引用到這個(gè)文件的所有類都需要重新編譯一遍惋鸥,這樣的效率也是可想而知的,而相對(duì)來 講悍缠,使用@class方式就不會(huì)出現(xiàn)這種問題了揩慕;

由上可知,@class是放在interface中的扮休,只是在引用一個(gè)類迎卤,將這個(gè)被引用類作為一個(gè)類型,在實(shí)現(xiàn)文件中玷坠,如果需要引用到被引用類的實(shí)體變量或者方法時(shí)蜗搔,還需要使用#import方式引入被引用類。

預(yù)編譯指令
Objective-C:#import
C八堡,C++:#include
#import由gcc編譯器支持
在 Objective-C 中樟凄,#import 被當(dāng)成 #include 指令的改良版本來使用。除此之外兄渺,#import 確定一個(gè)文件只能被導(dǎo)入一次缝龄,這使你在遞歸包含中不會(huì)出現(xiàn)問題。
使用哪一個(gè)還是由你來決定。一般來說叔壤,在導(dǎo)入 Objective-C 頭文件的時(shí)候使用 #import瞎饲,包含 C 頭文件時(shí)使用 #include。比如:

#import比起#include的好處就是不會(huì)引起交叉編譯
######第4題
OC中的屬性修飾符炼绘,查看一下[博文](http://blog.sina.com.cn/s/blog_83b365f60102w70n.html)嗅战,寫的很清楚。

######第5題
![](http://upload-images.jianshu.io/upload_images/701353-df72a6147a6477c5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
相信很多人都遇到了這個(gè)問題了吧俺亮!哈哈驮捍,沒錯(cuò)我也遇到了,因?yàn)槭羌兛创a脚曾,沒有Xcode進(jìn)行實(shí)操东且,所以還是又辣么一點(diǎn)點(diǎn)小難度的。
其實(shí)個(gè)人感覺這段代碼并沒有什么太大的錯(cuò)誤本讥,只是考考你是不是處女座(換句話說就是考驗(yàn)?zāi)愕拇a規(guī)范)
![](http://upload-images.jianshu.io/upload_images/701353-a10b92ff7f6af9e8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
這是我個(gè)人改的苇倡,可能每個(gè)人的變成習(xí)慣不一樣,所以答案也不唯一囤踩,這道題的初衷大概就是的窺視面試者的編程規(guī)范旨椒。
這里給出原因,我參考的[博客](http://ios.jobbole.com/82219/)
######第6題
試著定義一個(gè)block

typedef void(^selectRowAtIndex)(NSInteger index);
@property (nonatomic, copy)selectRowAtIndex handle;
//其實(shí)這些代碼要是用Xcode寫出來的話我相信有點(diǎn)經(jīng)驗(yàn)的都可以隨手寫出來堵漱,但是要是寫在紙上還是很惡心的一件事综慎,不是么?

反寫block:寫出下面代碼的Block的定義勤庐。

[UIView transitionWithView:self.view
duration:0.2
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ [[blueViewController view] removeFromSuperview]; [[self view] insertSubview:yellowViewController.view atIndex:0]; }
completion:NULL];
答案:
typedef void(^animations) (void);
typedef void(^completion) (BOOL finished);```

第7題

今天被餓了么的工程師問到了個(gè)問題示惊,自己覺得回答的不是很好,這里網(wǎng)上查了一下愉镰,做了相關(guān)的解釋米罚,下面貼出來

1、 類別(category)和繼承的區(qū)別丈探?
*類別:類別是對(duì)一個(gè)功能完備的類的一種補(bǔ)充录择,就像是一個(gè)東西的主要基本功能都完成了,可以用類別為這個(gè)類添加不同的組件碗降,使得這個(gè)類能夠適應(yīng)不同情況的需求隘竭。比如animal這個(gè)類,具有eat和run等方法讼渊,想給這個(gè)類添加一個(gè)bark的方法动看,可以用類別。

*繼承:多個(gè)類具有相同的實(shí)例變量和方法時(shí)爪幻,考慮用繼承菱皆。即子類可以繼承父類的相同特性须误。如animal具有年齡和體重兩個(gè)屬性,dog也具有年齡和體重兩 個(gè)屬性仇轻,dog可以繼承animal的這兩個(gè)屬性京痢,即為繼承。

共同點(diǎn):都是給一個(gè)類進(jìn)行擴(kuò)展

區(qū)別:
1.類別是對(duì)方法的擴(kuò)展拯田,不能添加成員變量历造。繼承可以在原來父類的成員變量的基礎(chǔ)上甩十,添加新的成員變量
2.類別只能添加新的方法船庇,不能修改和刪除原來的方法。繼承可以增加侣监、修改和刪除方法鸭轮。
3.類別不提倡對(duì)原有的方法進(jìn)行重載。繼承可以通過使用super對(duì)原來方法進(jìn)行重載橄霉。
4.類別可以被繼承窃爷,如果一個(gè)父類中定義了類別,那么其子類中也會(huì)繼承此類別姓蜂。

第8題
__block和__weak修飾符的區(qū)別

API Reference對(duì)__block變量修飾符有如下幾處解釋:

//A powerful feature of blocks is that they can modify 
variables in the same lexical scope. You signal that a block 
can modify a variable using the __block storage type 
modifier. 

//At function level are __block variables. These are mutable
 within the block (and the enclosing scope) and are preserved
 if any referencing block is copied to the heap.

大概意思?xì)w結(jié)出來就是兩點(diǎn):

1.__block對(duì)象在block中是可以被修改按厘、重新賦值的。 
2.__block對(duì)象在block中不會(huì)被block強(qiáng)引用一次钱慢,從而不會(huì)出現(xiàn)循環(huán)引用問題逮京。

API Reference對(duì)__weak變量修飾符有如下幾處解釋:

__weak specifies a reference that does not keep the 
referenced object alive. A weak reference is set to nil when
there are no strong references to the object.

使用了__weak修飾符的對(duì)象,作用等同于定義為weak的property束莫。自然不會(huì)導(dǎo)致循環(huán)引用問題懒棉,因?yàn)樘O果文檔已經(jīng)說的很清楚,當(dāng)原對(duì)象沒有任何強(qiáng)引用的時(shí)候览绿,弱引用指針也會(huì)被設(shè)置為nil策严。

因此,__block和__weak修飾符的區(qū)別其實(shí)是挺明顯的: 
1.__block不管是ARC還是MRC模式下都可以使用饿敲,可以修飾對(duì)象妻导,還可以修飾基本數(shù)據(jù)類型。 
2.__weak只能在ARC模式下使用怀各,也只能修飾對(duì)象(NSString)栗竖,不能修飾基本數(shù)據(jù)類型(int)。 
3.__block對(duì)象可以在block中被重新賦值渠啤,__weak不可以狐肢。 
PS:__unsafe_unretained修飾符可以被視為iOS SDK 4.3以前版本的__weak的替代品,不過不會(huì)被自動(dòng)置空為nil沥曹。所以盡可能不要使用這個(gè)修飾符份名。
第9題

OC有多繼承么碟联?沒有的話用什么代替竣贪?
其實(shí)第一問是廢話孽锥,為什么這么說惊科,因?yàn)楹苊黠@看出來這個(gè)問題的重點(diǎn)是后半句埠啃,所以O(shè)C是沒有多繼承的忱嘹。但是用什么代替呢怎栽?
我們都知道objective C不能像C++一樣支持多繼承俱饿,但是在OC的使用經(jīng)常會(huì)碰到需要使用多繼承的情況糟港。例如琉兜,ClassA中有methodA凯正,ClassB中methodB,而現(xiàn)在需要使用這兩個(gè)類中的方法豌蟋。如何按照C++的編程思路廊散,毫無疑問采用多繼承就搞定了,在OC就需要?jiǎng)觿?dòng)腦子了梧疲。
筆者最先想到的就是協(xié)議允睹,利用協(xié)議可以同時(shí)實(shí)現(xiàn)A + B;
其實(shí)我們?cè)趯W(xué)習(xí)設(shè)計(jì)模式的時(shí)候知道幌氮,多繼承的效率不高缭受,而且采用組合的模式可以完全代替繼承模式。那么该互,這種思路完全可以用在OC中實(shí)現(xiàn)多繼承(或許OC拋棄多繼承米者,就是強(qiáng)迫我們使用更高效的組合設(shè)計(jì)模式吧!)慢洋。上面這種方法是我百度到的塘雳,但是也未嘗不可,思路就是創(chuàng)建另一個(gè)ClassC 普筹,實(shí)現(xiàn)一個(gè)方法里面包含AB兩個(gè)方法败明。但是我覺得這樣太繁瑣。

其實(shí)每一次面試都是一次歷練太防,每一次面試都是一次考驗(yàn)妻顶,不管是哪方面,對(duì)于一個(gè)人的成長(zhǎng)都有益處的蜒车,就技術(shù)知識(shí)而言讳嘱,于我,每次都可以從面試的過程中學(xué)到新知識(shí)酿愧,亦或鞏固之前不確定的東西沥潭。一次面試讓自己發(fā)現(xiàn)很多之前沒有掌握好的東西,那么這次面試就是有價(jià)值的嬉挡,無論成功與否都是一次成長(zhǎng)的機(jī)會(huì)钝鸽。
歡迎大牛補(bǔ)充和指點(diǎn)汇恤。
歡迎關(guān)注我的微博博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拔恰,一起剝皮案震驚了整個(gè)濱河市因谎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颜懊,老刑警劉巖财岔,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異河爹,居然都是意外死亡匠璧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門昌抠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來患朱,“玉大人鲁僚,你說我怎么就攤上這事炊苫。” “怎么了冰沙?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵侨艾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拓挥,道長(zhǎng)唠梨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任侥啤,我火速辦了婚禮当叭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盖灸。我一直安慰自己蚁鳖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布赁炎。 她就那樣靜靜地躺著醉箕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徙垫。 梳的紋絲不亂的頭發(fā)上讥裤,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音姻报,去河邊找鬼己英。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吴旋,可吹牛的內(nèi)容都是我干的损肛。 我是一名探鬼主播寒亥,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼荧关!你這毒婦竟也來了溉奕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤忍啤,失蹤者是張志新(化名)和其女友劉穎加勤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同波,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳄梅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了未檩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戴尸。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冤狡,靈堂內(nèi)的尸體忽然破棺而出孙蒙,到底是詐尸還是另有隱情,我是刑警寧澤悲雳,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布挎峦,位于F島的核電站,受9級(jí)特大地震影響合瓢,放射性物質(zhì)發(fā)生泄漏坦胶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一晴楔、第九天 我趴在偏房一處隱蔽的房頂上張望顿苇。 院中可真熱鬧,春花似錦税弃、人聲如沸纪岁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜂科。三九已至,卻和暖如春短条,著一層夾襖步出監(jiān)牢的瞬間导匣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工茸时, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贡定,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓可都,卻偏偏與公主長(zhǎng)得像缓待,于是被迫代替她去往敵國(guó)和親蚓耽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 我是一只勤勞的小蜜蜂旋炒。閑暇之余步悠,總結(jié)下一直以來自己面試過程中所遇到的一些高概率問題,分享給大家瘫镇,共同成長(zhǎng)鼎兽。該貼后續(xù)...
    智障小魯班閱讀 442評(píng)論 0 12
  • 被面試問的問題, 和網(wǎng)上找到的我覺得不錯(cuò)的問題 會(huì)保持更新 -- 因都寫在一起了, 所以可能會(huì)穿插添加. 請(qǐng)諒解 ...
    DSperson閱讀 417評(píng)論 0 2
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,161評(píng)論 30 470
  • 因?yàn)閭€(gè)人原因,換了一份工作铣除,期間面試了有4谚咬,5家,基本都是D輪或者上市公司尚粘,也從他們的面試筆試中看到了自己的一些不...
    閑云清煙閱讀 296評(píng)論 0 2
  • 絕塵美貌醉君王择卦,烽火狼煙引四方。 不為三軍思苦楚郎嫁,只求一笑解愁腸秉继。 千騎胡馬齊攻鎬,百路公侯各守疆行剂。 自古紅顏皆禍...
    有故事的許同學(xué)閱讀 1,028評(píng)論 11 2