iOS面試題整理

1戒洼、數(shù)組去重的方法:

(1)原來集合操作可以通過valueForKeyPath來實現(xiàn)的狂秦,去重可以一行代碼實現(xiàn)(順序不發(fā)生變化)

(2)利用NSDictionary去重,字典在設(shè)置key-value時,若已存在則更新值污它,若不存在則插入值绎速,然后獲取allValues虾啦。若不要求有序锰扶,則可以采用此種方法。若要求有序初家,還得進(jìn)行排序(使用sortedArrayusingcomparator)

(3)利用集合NSSet的特性(確定性偎窘、無序性、互異性)溜在,放入集合就自動去重了陌知。但是它與字典擁有同樣的無序性,所得結(jié)果順序不再與原來一樣炕泳。如果不要求有序纵诞,使用此方法與字典的效率應(yīng)該是差不多的

(4)[NSOrderedset orderedsetwitharray:arr].array?

2上祈、runtime培遵,runloop,block登刺,kvo籽腕,kvc,gcd 底層原理纸俭、 iOS編譯原理皇耗,編譯流程、發(fā)起一次http或者h(yuǎn)ttps的整個流程

3揍很、iOS Runtime的實際應(yīng)用

1)動態(tài)給分類添加屬性 2)方法的交換swizzling 3)字典轉(zhuǎn)模型4)獲取所有的私有屬性和方法5)對私有屬性修改6)歸檔:解檔7)動態(tài)的添加方法

4郎楼、一次完整的HTTP請求過程

對www.baidu.com這個網(wǎng)址進(jìn)行DNS域名解析,得到對應(yīng)的IP地址

根據(jù)這個IP窒悔,找到對應(yīng)的服務(wù)器呜袁,發(fā)起TCP的三次握手

建立TCP連接后發(fā)起HTTP請求

服務(wù)器響應(yīng)HTTP請求,瀏覽器得到html代碼

瀏覽器解析html代碼简珠,并請求html代碼中的資源(如js阶界、css、圖片等)(先得到html代碼,才能去找這些資源)

瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶

服務(wù)器關(guān)閉關(guān)閉TCP連接

5膘融、KVO

當(dāng)某個類的實例對象的key第一次被觀察時芙粱,系統(tǒng)就會在運行期動態(tài)地

創(chuàng)建該類的一個派生類NSKVONotifying_類名,

在這個派生類中重寫該類中被觀察的屬性的 setter 方法氧映。

5.1 當(dāng)調(diào)用addObserver函數(shù)的時候春畔,系統(tǒng)運行時自動幫你把Animal類替換為了 NSKVONotifying_Animal類,同時重寫了set方法岛都,當(dāng)我們查看addObserver函數(shù)的時候拐迁,可以看到該函數(shù)在NSObject分類下@interfaceNSObject(NSKeyValueObserverRegistration)

作者:roger_Hunter

鏈接:http://www.reibang.com/p/91c41292b5b9

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)疗绣,非商業(yè)轉(zhuǎn)載請注明出處线召。

6、Runtime 的作用

Objc 在三種層面上與 Runtime 系統(tǒng)進(jìn)行交互:

通過 Objective-C 源代碼

通過 Foundation 框架的 NSObject 類定義的方法

通過對 Runtime 庫函數(shù)的直接調(diào)用

作者:sheldon_龍

鏈接:http://www.reibang.com/p/735a9ed7062f

來源:簡書

著作權(quán)歸作者所有多矮。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)缓淹,非商業(yè)轉(zhuǎn)載請注明出處。

7塔逃、__weak?在指向的內(nèi)存銷毀后讯壶,可以將指針變量置為?nil,這樣更加安全湾盗。

1伏蚊、初始化時:runtime會調(diào)用objc_initWeak函數(shù),初始化一個新的weak指針指向?qū)ο蟮牡刂贰?/p>

2格粪、添加引用時:objc_initWeak函數(shù)會調(diào)用objc_storeWeak()函數(shù)躏吊,objc_storeWeak()的作用是更新指針指向,創(chuàng)建對應(yīng)的弱引用表帐萎。

3比伏、釋放時,調(diào)用clearDeallocating函數(shù)疆导。clearDeallocating函數(shù)首先根據(jù)對象地址獲取所有weak指針地址的數(shù)組赁项,然后遍歷這個數(shù)組把其中的數(shù)據(jù)設(shè)為nil,最后把這個entry從weak表中刪除澈段,最后清理對象的記錄悠菜。

作者:Liberalism

鏈接:http://www.reibang.com/p/0d7dfb5093a8

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)败富,非商業(yè)轉(zhuǎn)載請注明出處悔醋。

8、如何打破循環(huán)引用囤耳?

注意變量作用域篙顺,使用?autorelease?讓編譯器來處理引用偶芍。

使用弱引用(__weak)。

當(dāng)實例變量完成工作后德玫,將其置為?nil匪蟀。

9、autoReleasePool什么時候釋放?

App啟動后宰僧,蘋果在主線程RunLoop里注冊了兩個Observer材彪,其回調(diào)都是_wrapRunLoopWithAutoreleasePoolHandler()。

第一個Observer監(jiān)視的事件是Entry(即將進(jìn)入Loop)琴儿,其回調(diào)內(nèi)會調(diào)用_objc_autoreleasePoolPush()創(chuàng)建自動釋放池段化。其order是-2147483647,優(yōu)先級最高造成,保證創(chuàng)建釋放池發(fā)生在其他所有回調(diào)之前显熏。

第二個Observer監(jiān)視了兩個事件:BeforeWaiting(準(zhǔn)備進(jìn)入休眠) 時調(diào)用_objc_autoreleasePoolPop()和_objc_autoreleasePoolPush()釋放舊的池并創(chuàng)建新池;Exit(即將退出Loop) 時調(diào)用_objc_autoreleasePoolPop()來釋放自動釋放池晒屎。這個Observer的order是2147483647喘蟆,優(yōu)先級最低,保證其釋放池子發(fā)生在其他所有回調(diào)之后鼓鲁。

在主線程執(zhí)行的代碼蕴轨,通常是寫在諸如事件回調(diào)、Timer回調(diào)內(nèi)的骇吭。這些回調(diào)會被RunLoop創(chuàng)建好的AutoreleasePool環(huán)繞著橙弱,所以不會出現(xiàn)內(nèi)存泄漏,開發(fā)者也不必顯示創(chuàng)建Pool了燥狰。

作者:Liberalism

鏈接:http://www.reibang.com/p/0d7dfb5093a8

來源:簡書

著作權(quán)歸作者所有棘脐。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處碾局。

10荆残、Block從棧中復(fù)制到堆

調(diào)用Block的copy實例方法時

Block作為函數(shù)返回值返回時

在帶有usingBlock的Cocoa方法或者GCD的API中傳遞Block時候

將block賦給帶有__strong修飾符的id類型或者Block類型時

作者:小涼介

鏈接:http://www.reibang.com/p/221d0778dcaa

來源:簡書

著作權(quán)歸作者所有奴艾。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)净当,非商業(yè)轉(zhuǎn)載請注明出處。

11蕴潦、如標(biāo)題首先需要注冊? ? [self.wkWebView.configuration.userContentController addScriptMessageHandler:self?name:@"方法名"];

didReceiveScriptMessage方法進(jìn)行監(jiān)聽

H5只需要一行代碼:window.webkit.messageHandlers.方法名.postMessage(null);//ps: 小括號里的null或者說是參數(shù)一定要寫像啼,否則iOS這點不會有回調(diào)。

12潭苞、1忽冻、+load方法是在加載類和分類時系統(tǒng)調(diào)用,一般不手動調(diào)用此疹,如果想要在類或分類加載時做一些事情僧诚,可以重寫類或者分類的+load方法方法遮婶。

2、每個類湖笨、分類的+load旗扑,在程序運行過程中只調(diào)用一次。

調(diào)用順序

1慈省、類要優(yōu)先于分類調(diào)用+load方法臀防;

2、子類調(diào)用+load方法時边败,要先要調(diào)用父類的+load方法袱衷;(父類優(yōu)先與子類,與繼承不同)笑窜;

3致燥、不同的類按照編譯先后順序調(diào)用+load方法(先編譯,先調(diào)用)排截;

4篡悟、分類的按照編譯先后順序調(diào)用+load方法(先編譯,先調(diào)用)匾寝。

call_class_loads()搬葬,call_category_loads() ;看到這兩個函數(shù)想到了什么呢艳悔?

對急凰,就是這兩個函數(shù)決定了類優(yōu)先與分類調(diào)用+load方法;

說明:+load方法是系統(tǒng)根據(jù)方法地址直接調(diào)用猜年,并不是objc_msgSend函數(shù)調(diào)用(isa抡锈,superClass);這就決定了如果子類沒有實現(xiàn)+load方法乔外,那么當(dāng)它被加載時runtime是不會調(diào)用父類的+load方法的床三,除非父類也實現(xiàn)了+load方法;

作者:呂建雄

鏈接:http://www.reibang.com/p/7a4162f59991

http://www.reibang.com/p/e6979a17da91

來源:簡書

著作權(quán)歸作者所有杨幼。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)撇簿,非商業(yè)轉(zhuǎn)載請注明出處。

13差购、iOS @autoreleasepool是什么四瘫?什么時候用?什么時候釋放?

一是Autorelease對象是在當(dāng)前的runloop迭代結(jié)束時釋放的欲逃,而它能夠釋放的原因是系統(tǒng)在每個runloop迭代中都加入了自動釋放池Push和Pop找蜜。

二是手動調(diào)用AutoreleasePool的釋放方法(drain方法)來銷毀AutoreleasePool

對于每一個Runloop, 系統(tǒng)會隱式創(chuàng)建一個Autorelease pool稳析,這樣所有的release pool會構(gòu)成一個象CallStack一樣的一個棧式結(jié)構(gòu)洗做,在每一個Runloop結(jié)束時弓叛,當(dāng)前棧頂?shù)腁utorelease pool會被銷毀,這樣這個pool里的每個Object會被release诚纸。

那什么是一個Runloop呢邪码? 一個UI事件,Timer call咬清, delegate call闭专, 都會是一個新的Runloop。

作者:GabrielPanda

鏈接:http://www.reibang.com/p/405b8dfc3829

來源:簡書

著作權(quán)歸作者所有旧烧。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)影钉,非商業(yè)轉(zhuǎn)載請注明出處。

14掘剪、http://www.reibang.com/p/d0aab0eb8ce4 ? ?iOS實時卡頓檢測-RunLoop(附實例) ?https://github.com/chenshuangsmart/CatonMonitor/tree/master/PerformanceMonitor

15平委、tableView的內(nèi)存/性能優(yōu)化和iOS性能優(yōu)化?

? ? ? ?答:tableView內(nèi)存優(yōu)化核心思想是:

? ? ? ?1夺谁、cell的復(fù)用機(jī)制廉赔,在使用cell時,只會創(chuàng)建一屏幕多一個的cell匾鸥,例如:如果一屏幕能裝下10個cell蜡塌,系統(tǒng)只需要創(chuàng)建11個cell,當(dāng)顯示第11個cell時勿负,第一個cell正在失去焦點馏艾,當(dāng)滑動到第12個cell時,第一個cell已經(jīng)完全失去焦點奴愉,放在緩存池等待復(fù)用琅摩。此時第12個cell就會使用cellIdentifier標(biāo)識去緩存池中尋找相對應(yīng)的cell,如果存在锭硼,就不用創(chuàng)建新的cell房资,直接從緩存池中取出來重新賦值。這樣做的目的是為了防止cell創(chuàng)建過多浪費內(nèi)存檀头。

? ? ? ?2轰异、cell滑動時數(shù)據(jù)( 圖片)按需加載,在cell數(shù)據(jù)過于龐大時鳖擒,快速滑動很容易造成頁面卡楨溉浙,對此問題,我首先想到的是數(shù)據(jù)的異步加載蒋荚,但異步加載在滑動時,操作依然會被執(zhí)行馆蠕,開啟線程過多時期升,對整個app的性能也會造成很大的影響惊奇。

? ? ? ?此時可以利用父類UIScrollView的兩個代理來解決這個問題。

方法一:- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate(此方法在停止拖拽時執(zhí)行)

方法二:- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView(此方法在減速停止時執(zhí)行)

? ? ? ?可利用此方法在tableView停止滑動時播赁,進(jìn)行圖片加載颂郎。加載前,調(diào)用 indexPathsForVisibleRows或者visibleCells遍歷出可見部分的indexPath數(shù)組或者cell數(shù)組容为,然后按需加載乓序。

也可以在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中通過截取tableView的當(dāng)前狀態(tài)來進(jìn)行圖片異步加載操作。

作者:馬威明

鏈接:http://www.reibang.com/p/4158c73690db

來源:簡書

著作權(quán)歸作者所有坎背。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)替劈,非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末得滤,一起剝皮案震驚了整個濱河市陨献,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懂更,老刑警劉巖眨业,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沮协,居然都是意外死亡龄捡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門慷暂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墅茉,“玉大人,你說我怎么就攤上這事呜呐【徒铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵蘑辑,是天一觀的道長洋机。 經(jīng)常有香客問我,道長洋魂,這世上最難降的妖魔是什么绷旗? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮副砍,結(jié)果婚禮上衔肢,老公的妹妹穿的比我還像新娘。我一直安慰自己豁翎,他們只是感情好角骤,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般邦尊。 火紅的嫁衣襯著肌膚如雪背桐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天蝉揍,我揣著相機(jī)與錄音链峭,去河邊找鬼。 笑死又沾,一個胖子當(dāng)著我的面吹牛弊仪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杖刷,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼励饵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挺勿?” 一聲冷哼從身側(cè)響起曲横,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不瓶,沒想到半個月后禾嫉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蚊丐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年熙参,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麦备。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡孽椰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凛篙,到底是詐尸還是另有隱情黍匾,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布呛梆,位于F島的核電站锐涯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏填物。R本人自食惡果不足惜纹腌,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滞磺。 院中可真熱鬧升薯,春花似錦、人聲如沸击困。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至责语,卻和暖如春炮障,著一層夾襖步出監(jiān)牢的瞬間目派,已是汗流浹背坤候。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留企蹭,地道東北人白筹。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像谅摄,于是被迫代替她去往敵國和親徒河。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355