iOS一些面試題

寫了一下午代碼本來想去透透氣突然來了一個(gè)電話,是碼市的什么優(yōu)質(zhì)開發(fā)者調(diào)查員,我都忘了什么時(shí)候申請(qǐng)過的!人家問了我一些問題,每個(gè)都似曾相識(shí),卻又說不完整!記得兩年多前面試的時(shí)候可是背的滾瓜爛熟的,UI界面畫久了還真都忘得差不多了?;貋碚砹艘幌聞偛诺膯栴},就當(dāng)在復(fù)習(xí)下,因?yàn)橐院髶Q工作可能一會(huì)用得到。還有一個(gè)關(guān)于繼承的忘了問的什么了。

weak和assgin的區(qū)別

當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí),所有指向該對(duì)象的weak屬性指針會(huì)被自動(dòng)設(shè)置為nil,而assign屬性不會(huì),如果對(duì)象被釋放了,此時(shí)再進(jìn)行訪問,程序崩潰。

@property屬性關(guān)鍵字詳解

xib/sb為什么用weak

總結(jié)下應(yīng)該是xib/sb只需要強(qiáng)引用它們所必須持有的第一個(gè)對(duì)象就行,比如viewcontroller。第一個(gè)對(duì)象下面的用weak,這樣viewcontroller釋放后所有的子view也會(huì)釋放。不用擔(dān)心內(nèi)存泄漏。

UIView屬性用weak還是strong?

Storyboard 使用 Weak Property 聲明 Outlet

runloop的用到了那些model

這篇寫的比較全我就不廢話了
Runloop

Extension(擴(kuò)展)和Categories(分類)的區(qū)別

  • 類別:在沒有原類 .m 文件的基礎(chǔ)上,給該類添加方法;
  • 延展:一種特殊形式的類別,主要在一個(gè)類的.m文件里聲明和實(shí)現(xiàn)延展的作用,就是給某類添加私有方法或是私有變量。
  • 兩個(gè)的區(qū)別:
    ① 延展可以添加屬性并且它的方法都是波裇實(shí)現(xiàn)的。延展可以認(rèn)為是一個(gè)私有的類目。
    ② 類別可以在不知道,不改變?cè)写a的情況下往里面添加新的方法,只能添加,不能刪除修改。
    ③ 并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法,因?yàn)轭悇e具有更高的優(yōu)先級(jí)。
    ④ 繼承可以增加,修改刪除方法,添加屬性。
  • Category只能為對(duì)象添加方法,卻不能添加成員變量。原因:如果可以添加成員變量,添加的成員變量沒有辦法初始化

@property中有哪些屬性關(guān)鍵字默認(rèn)的有哪些

  • 原子性(atomic,nonatomic)
  • 讀寫(readwrite, readonly)
  • 內(nèi)存管理(assign, strong, weak, unsafe_unretained,copy)
  • getter、setter
  • 默認(rèn)的有atomic,readwrite,assign,

OC中調(diào)用nil對(duì)象的方法

  • nil和C語(yǔ)言的NULL相同,在objc/objc.h中定義。nil表示Objective-C對(duì)象的值為空。
    在C語(yǔ)言中,指針的控制用NULL表示。在Objective-C中,nil對(duì)象調(diào)用任何方法表示什莫
    也不執(zhí)行,也不會(huì)崩潰。
  • 向nil發(fā)送消息是完全有效的-- 只是在運(yùn)行時(shí)不會(huì)有任何作用。
  • 如果一個(gè)方法返回值是一個(gè)對(duì)象,那么發(fā)送給nil的消息將返回0(nil)
  • 如果方法返回值為指針類型,其指針大小為小于或者等 sizeof(void*),float,double,long double
    或者long long 的整型標(biāo)量,發(fā)送給nil的消息將返回0.

iOS-OC篇 (1~72)

base64和MD5

MD5是一種不可逆的消息摘要算法。為計(jì)算機(jī)安全領(lǐng)域廣泛使?的一種散列函數(shù),
用以提供消息的完整性保護(hù)。常用語(yǔ)校驗(yàn)。

Base64是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的表示方法。Base64是一種編碼方式。
注意:base64的主要作用不是加密,而是用來避免“字節(jié)”中不能轉(zhuǎn)換成可顯示字符的數(shù)值。
MD5和Base64介紹與應(yīng)用

最近有面試了兩家,繼續(xù)記錄下,好多東西知道用的時(shí)候要注意什么,但是直接讓回答有時(shí)候還真的打答不出來。

block什么時(shí)候在堆上,什么時(shí)候在棧上

block本身是像對(duì)象一樣可以retain,和release。但是,block在創(chuàng)建的時(shí)候,它的內(nèi)存是分配在棧(stack)上,而不是在堆(heap)上。他本身的作于域是屬于創(chuàng)建時(shí)候的作用域,一旦在創(chuàng)建時(shí)候的作用域外面調(diào)用block將導(dǎo)致程序崩潰。使用retain也可以,但是block的retain行為默認(rèn)是用copy的行為實(shí)現(xiàn)的, 因?yàn)閎lock變量默認(rèn)是聲明為棧變量的,為了能夠在block的聲明域外使用,所以要把block拷貝(copy)到堆,所以說為了block屬性聲明和實(shí)際的操作一致,最好聲明為copy。

__block和__weak有什么區(qū)別?

__block不管是ARC還是MRC模式下都可以使用,可以修飾對(duì)象,還可以修飾基本數(shù)據(jù)類型。
__weak只能在ARC模式下使用,也只能修飾對(duì)象,不能修飾基本數(shù)據(jù)類型。
__block對(duì)象可以在block中被重新賦值,__weak不可以。

相比delegate的邏輯散落,blocks更加的優(yōu)雅簡(jiǎn)潔,我對(duì)block比較深刻的體會(huì)就是它簡(jiǎn)化了回調(diào)的過程,可以讓代碼明顯提高可讀、可維護(hù)性和封裝性。block的本質(zhì)應(yīng)該說是匿名函數(shù),這是OC中所沒有的,解決了方法不能傳遞問題。

iOS面試題

多個(gè)網(wǎng)絡(luò)請(qǐng)求全部完成后再執(zhí)行

多個(gè)網(wǎng)絡(luò)請(qǐng)求并發(fā)執(zhí)行、順序執(zhí)行
這個(gè)我記得是有這個(gè)信號(hào)量,面試的哥們說了一句信號(hào)量是RAC的東西,一下把我打亂了!GCD中的信號(hào)量應(yīng)該是和RAC的不同。RAC沒有過多研究過,有空看看。

viewcontroller生命周期

這個(gè)是很基礎(chǔ)的,一時(shí)緊張竟然沒說完整!
iOS - ViewController生命周期

block和delegate分別在什么時(shí)候適合使用

在IOS的開發(fā)中,代理能夠完成的事情,使用block都可以實(shí)現(xiàn),因?yàn)樗鼈兌际呛瘮?shù)的回調(diào),并且block的實(shí)現(xiàn)方式是更加簡(jiǎn)單的,因?yàn)樗恍枰贫▍f(xié)議,也不需要定義讓自身成為代理;但是有些時(shí)候,如果這個(gè)對(duì)象對(duì)外界提供的接口很多,那么使用代理是更加方便的,因?yàn)樗梢园岩獙?shí)現(xiàn)的函數(shù)寫在一起,只要成為它的代理就可以同時(shí)實(shí)現(xiàn)它的這些方法,如果是使用block,需要每次調(diào)用block,顯得比較亂。
所以綜上,要是接口少,最好用block,要是接口多就用delegate。

怎么去優(yōu)化一個(gè)viewcontroller

這個(gè)問題,我前段時(shí)間去滬江參加過一個(gè)iOS的分享,PPTV的任凱前輩分享了一個(gè)代碼重構(gòu)的經(jīng)驗(yàn),當(dāng)時(shí)忘了總結(jié)了,PPT我還留著,大家有興趣可以看看。找個(gè)一個(gè)現(xiàn)場(chǎng)小伙伴的總結(jié)。
滬江 iOS 技術(shù)沙龍隨想

滬江技術(shù)沙龍iOS專場(chǎng)

git的常用命令merge和rebase

git merge <branch> # 將branch分支合并到當(dāng)前分支

git merge origin/master --no-ff # 不要Fast-Foward合并,這樣可以生成merge提交
 
git rebase master <branch> # 將master rebase到branch,相當(dāng)于: git co <branch> && git rebase master && git co master && git merge <branch>

我大部分時(shí)間都是單打獨(dú)斗,所以git的命令除了push別的都沒怎么用過!

set和array的區(qū)別,怎么判斷set集合里面的對(duì)象

區(qū)別set無序,array有序。(我擦我當(dāng)時(shí)竟然忘了這個(gè),面試估計(jì)完蛋了)
set元素具有唯一性,不可重復(fù)。array的元素可以重復(fù)。

如果是自定義對(duì)象,對(duì)象可能有很多屬性,可以便利所有的屬性來判斷是否相同,但是效率肯定低。參考這個(gè)iOS中的對(duì)象等同性

關(guān)于約束的優(yōu)先級(jí)

我以前碰到類似的問題好像都是把約束拖出來用代碼解決的,這個(gè)還真沒有注意過!
在約束的設(shè)置里面有一個(gè)Priority參數(shù),設(shè)置這個(gè)數(shù)值越大優(yōu)先級(jí)越高,有些類似CSS中z-index屬性。

只有20%的iOS程序員能看懂:詳解intrinsicContentSize 及 約束優(yōu)先級(jí)/content Hugging/content Compression Resistance

最近幾個(gè)iOS版本的特性

開發(fā)者需要知道的iOS 8 SDK新特性

開發(fā)者所需要知道的 iOS 9 SDK 新特性

開發(fā)者所需要知道的 iOS 10 SDK 新特性

iOS 9 適配系列教程
iOS開發(fā)--適配iOS 10以及Xcode 8

react native 的核心思想

React-Native的核心思想就是組件化
React Native學(xué)習(xí)總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,666評(píng)論 30 472
  • 1、簡(jiǎn)述你項(xiàng)目中常用的設(shè)計(jì)模式。它們有什么優(yōu)缺點(diǎn)?常用的設(shè)計(jì)模式有:代理、觀察者、單例。(1)單例:它是用來限制一...
    LZM輪回閱讀 1,152評(píng)論 0 6
  • 男神李二狗閱讀 235評(píng)論 1 1
  • 夢(mèng)想是什么?青春漸漸老去你的兒時(shí)的夢(mèng)想還在?還能記得起兒時(shí)記憶嘛?你是否還是追逐夢(mèng)想?是否半途放棄夢(mèng)想? 夢(mèng)想是什...
    劉培晟閱讀 299評(píng)論 0 1
  • 最近有一部剛開播的美劇火了—— 讓人意外的是一部主講過氣女明星撕逼的電視劇在豆瓣評(píng)分9.3分。國(guó)內(nèi)的電視劇流量擔(dān)當(dāng)...
    Bonnnnnieeeee閱讀 974評(píng)論 0 0

友情鏈接更多精彩內(nèi)容