面試題目

Paste_Image.png

1.如何理解interface 和 property?
答:a. 只在@interface中定義變量的話,你所定義的變量只能在當(dāng)前的類中訪問,在其他類中是訪問不了的引矩;而用@property聲明的變量可以在外部訪問烧给。
b.用了@property去聲明的變量燕偶,可以使用“self.變量名”的方式去讀寫變量。而用@interface的方式就不可以础嫡。

2.怎么內(nèi)存管理(ARC)
a. block的內(nèi)存管理
  iOS中使用block必須自己管理內(nèi)存指么,錯(cuò)誤的內(nèi)存管理將導(dǎo)致循環(huán)引用等內(nèi)存泄漏問題,這里主要說明在ARC下block聲明和使用的時(shí)候需要注意的兩點(diǎn):  1)如果你使用@property去聲明一個(gè)block的時(shí)候榴鼎,一般使用copy來進(jìn)行修飾(當(dāng)然也可以不寫伯诬,編譯器自動(dòng)進(jìn)行copy操作),盡量不要使用retain巫财。
@property (nonatomic, copy) void(^block)(NSData * data);

2)block會(huì)對(duì)內(nèi)部使用的對(duì)象進(jìn)行強(qiáng)引用盗似,因此在使用的時(shí)候應(yīng)該確定不會(huì)引起循環(huán)引用,當(dāng)然保險(xiǎn)的做法就是添加弱引用標(biāo)記平项。
__weak typeof(self) weakSelf = self;

有興趣的讀者可以深入了解:
  1赫舒、block的內(nèi)部實(shí)現(xiàn)原理是什么?  2葵礼、從內(nèi)存位置來看block有幾種類型号阿?它們的內(nèi)存管理方式各是怎樣的?  3、對(duì)于不同類型的外部變量,block的內(nèi)存管理都是怎樣的废菱?

b 經(jīng)典內(nèi)存泄漏及其解決方案
  雖然ARC好處多多乖菱,然而也并無法避免內(nèi)存泄漏問題,下面介紹在ARC中常見的內(nèi)存泄漏。
  b.1 僵尸對(duì)象和野指針
  僵尸對(duì)象:內(nèi)存已經(jīng)被回收的對(duì)象。
  野指針:指向僵尸對(duì)象的指針,向野指針發(fā)送消息會(huì)導(dǎo)致崩潰湖雹。
  野指針錯(cuò)誤形式在Xcode中通常表現(xiàn)為:Thread 1:EXC_BAD_ACCESS,因?yàn)槟阍L問了一塊已經(jīng)不屬于你的內(nèi)存曙搬∷だ簦  例子代碼:(沒有出現(xiàn)錯(cuò)誤的筒子多運(yùn)行幾遍,因?yàn)楂@取野指針指向的結(jié)果是不確定的)
Dog * dog = [[Dog alloc]init]; NSLog(@"before"); NSLog(@"%s",object_getClassName(dog)); [dog release]; NSLog(@"after"); NSLog(@"%s",object_getClassName(dog));

運(yùn)行結(jié)果:
[15184:5811062] before [15184:5811062] Dog [15184:5811062] after (lldb)

可以看到纵装,當(dāng)運(yùn)行到第六行的時(shí)候崩潰了征讲,并給出了EXC_BAD_ACCESS的提示。
  解決方案:
  對(duì)象已經(jīng)被釋放后橡娄,應(yīng)將其指針置為空指針(沒有指向任何對(duì)象的指針诗箍,給空指針發(fā)送消息不會(huì)報(bào)錯(cuò))。
  然而在實(shí)際開發(fā)中實(shí)際遇到EXC_BAD_ACCESS錯(cuò)誤時(shí)挽唉,往往很難定位到錯(cuò)誤點(diǎn)滤祖,幸好Xcode提供方便的工具給我們來定位及分析錯(cuò)誤筷狼。  1)在product-scheme-edit scheme-diagnostics中將enable zombie objects勾選上匠童,下次再出現(xiàn)這樣的錯(cuò)誤就可以準(zhǔn)確定位了埂材。  運(yùn)行結(jié)果:
[15169:5801945] before [15169:5801945] Dog [15169:5801945] after [15169:5801945] _NSZombie_Dog

可以看到俏让,當(dāng)運(yùn)行到第六行時(shí)并沒有崩潰楞遏,并給出了NSZombie的提示茬暇。
  2)在Xcode-open developer tool-Instruments打開工具集首昔,選擇Zombies工具可以對(duì)已安裝的應(yīng)用進(jìn)行僵尸對(duì)象檢測。
  b.2 循環(huán)引用
  循環(huán)引用是ARC中最常出現(xiàn)的問題糙俗,對(duì)于可能引發(fā)循環(huán)引用的一些原因在前一篇文章iOS總結(jié)篇:影響控制器正常釋放的常見問題中有提及勒奇,大家可以看看。
  一般來講循環(huán)引用也是可以使用工具來檢測到的巧骚,分為兩種:  1)在product-Analyze中使用靜態(tài)分析來檢測代碼中可能存在循環(huán)引用的問題赊颠。
  2)在Xcode-open developer tool-Instruments打開工具集,選擇Leaks工具可以對(duì)已安裝的應(yīng)用進(jìn)行內(nèi)存泄漏檢測劈彪,此工具能檢測靜態(tài)分析不會(huì)提示竣蹦,但是到運(yùn)行時(shí)才會(huì)出現(xiàn)的內(nèi)存泄漏問題。
  Leaks工具雖然強(qiáng)大沧奴,但是它不能檢測到block循環(huán)引用導(dǎo)致的內(nèi)存泄漏痘括,這種情況一般需要自行排查問題(考驗(yàn)?zāi)愕幕竟r(shí)候到了),傻瓜式的方案當(dāng)然是重寫對(duì)象的dealloc方法來監(jiān)測對(duì)象是否正常釋放滔吠,來確認(rèn)沒有形成循環(huán)引用纲菌。
  由于ARC中循環(huán)引用出現(xiàn)的幾率相對(duì)較大,很多大神或者團(tuán)隊(duì)都提供了很多解決此問題的思路和方法疮绷,甚至開發(fā)了插件和類庫來幫助開發(fā)者更好地檢測問題翰舌,有興趣的讀者可以研究一下,是否好用冬骚,孰好孰壞就由讀者自行評(píng)判了椅贱。
  b.3 循環(huán)中對(duì)象占用內(nèi)存大
  這個(gè)問題常見于循環(huán)次數(shù)較大,循環(huán)體生成的對(duì)象占用內(nèi)存較大的情景只冻”勇螅  例子代碼:我需要10000個(gè)演員來打仗
for (int i = 0; i < 10000; i ++) { Person * soldier = [[Person alloc]init]; [soldier fight]; }

該循環(huán)內(nèi)產(chǎn)生大量的臨時(shí)對(duì)象,直至循環(huán)結(jié)束才釋放属愤,可能導(dǎo)致內(nèi)存泄漏女器,解決方法和上文中提到的自動(dòng)釋放池常見問題類似:在循環(huán)中創(chuàng)建自己的autoReleasePool,及時(shí)釋放占用內(nèi)存大的臨時(shí)變量住诸,減少內(nèi)存占用峰值驾胆。
for (int i = 0; i < 10000; i ++) { @autoreleasepool { Person * soldier = [[Person alloc]init]; [soldier fight]; } }

然而有時(shí)候autoReleasePool也不是萬能的:  例子:假如有2000張圖片涣澡,每張1M左右,現(xiàn)在需要獲取所有圖片的尺寸丧诺,你會(huì)怎么做入桂?  如果這樣做
for (int i = 0; i < 2000; i ++) { CGSize size = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]].size; //add size to array }

用imageNamed方法加載圖片占用Cache的內(nèi)存,autoReleasePool也不能釋放驳阎,對(duì)此問題需要另外的解決方法抗愁,當(dāng)然保險(xiǎn)的當(dāng)然是雙管齊下了
for (int i = 0; i < 2000; i ++) { @autoreleasepool { CGSize size = [UIImage imageWithContentsOfFile:filePath].size; //add siez to array } }

b.4 無限循環(huán)
  這個(gè)是比4.3更極端的情況,無論你出于什么原因呵晚,當(dāng)你啟動(dòng)了一個(gè)無限循環(huán)的時(shí)候蜘腌,ARC會(huì)默認(rèn)該方法用不會(huì)執(zhí)行完畢,方法里面的對(duì)象就永不釋放饵隙,內(nèi)存無限上漲撮珠,導(dǎo)致內(nèi)存泄漏〗鹈  例子:
NSLog(@"start !"); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ BOOL isSucc = YES; while (isSucc) { [NSThread sleepForTimeInterval:1.0]; NSLog(@"create an obj"); } });

輸出結(jié)果為
[7026:3555827] start ! [7026:3556236] create an obj [7026:3556236] create an obj [7026:3556236] create an obj [7026:3556236] create an obj [7026:3555827] dealloc [7026:3556236] create an obj [7026:3556236] create an obj [7026:3556236] create an obj

可以看到芯急,當(dāng)控制器釋放后該循環(huán)還在繼續(xù)∈豢。  
  對(duì)于這類問題解決方案是什么呢娶耍?留給讀者思考吧~ _
  提示:解決方法有autoreleasepool、block饼酿、timer等等

3.cocoa框架中有什么設(shè)計(jì)模式榕酒?
a.單例模式
b.觀察者模式:KVO機(jī)制 通知機(jī)制 委托模式
http://www.cocoachina.com/ios/20141111/10187.html

1.如何定位自己位置?

2.如何實(shí)現(xiàn)下拉加載更多數(shù)據(jù)嗜湃?

3.關(guān)于GCD
兩個(gè)重要概念:隊(duì)列 和 任務(wù)的奈应、和 隊(duì)列組
隊(duì)列:串行隊(duì)列、并行隊(duì)列购披、主隊(duì)列杖挣、全局隊(duì)列
任務(wù):同步執(zhí)行、異步執(zhí)行

用GCD創(chuàng)建多個(gè)子線程刚陡,要求在子線程全部完成任務(wù)之后執(zhí)行某操作惩妇,應(yīng)該怎么做?

其實(shí)這個(gè)問題我們只要回答利用GCD并行執(zhí)行多個(gè)線程,等待所有線程結(jié)束之后再執(zhí)行其他任務(wù) 用我們上面說過的隊(duì)列組的方法就OK 然后問怎么判斷這些任務(wù)都執(zhí)行完了,其實(shí)dispatch_group_notify函數(shù)里面的block就是

a.創(chuàng)建隊(duì)列組
b.創(chuàng)建全局隊(duì)列
c.多次使用隊(duì)列組方法執(zhí)行任務(wù)
d.都完成后會(huì)自動(dòng)通知

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筐乳,一起剝皮案震驚了整個(gè)濱河市歌殃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝙云,老刑警劉巖氓皱,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡波材,警方通過查閱死者的電腦和手機(jī)股淡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來廷区,“玉大人唯灵,你說我怎么就攤上這事∠肚幔” “怎么了埠帕?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玖绿。 經(jīng)常有香客問我敛瓷,道長,這世上最難降的妖魔是什么镰矿? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任琐驴,我火速辦了婚禮俘种,結(jié)果婚禮上秤标,老公的妹妹穿的比我還像新娘。我一直安慰自己宙刘,他們只是感情好苍姜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悬包,像睡著了一般衙猪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上布近,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天垫释,我揣著相機(jī)與錄音,去河邊找鬼撑瞧。 笑死棵譬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的预伺。 我是一名探鬼主播订咸,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼酬诀!你這毒婦竟也來了脏嚷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤瞒御,失蹤者是張志新(化名)和其女友劉穎父叙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾唱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年屿岂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鲸匿。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爷怀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出带欢,到底是詐尸還是另有隱情运授,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布乔煞,位于F島的核電站吁朦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渡贾。R本人自食惡果不足惜逗宜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望空骚。 院中可真熱鬧纺讲,春花似錦、人聲如沸囤屹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肋坚。三九已至乡括,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間智厌,已是汗流浹背诲泌。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铣鹏,地道東北人敷扫。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像吝沫,于是被迫代替她去往敵國和親呻澜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • Objective-C是一門動(dòng)態(tài)的語言 ① 什么是動(dòng)態(tài)語言惨险? 動(dòng)態(tài)語言羹幸,是指程序在運(yùn)行時(shí)可以改變其結(jié)構(gòu):新的函數(shù)可...
    小李龍彪閱讀 369評(píng)論 0 0
  • 一、筆試常用基礎(chǔ)問題 1.#import 和 #include 的區(qū)別 @class辫愉? @class一般用于頭文件...
    鄭莫軒閱讀 1,341評(píng)論 0 11
  • 1.什么是arc栅受?(arc是為了解決什么問題誕生的?) 首先解釋ARC: automatic reference ...
    LuckTime閱讀 407評(píng)論 0 0
  • 1、基礎(chǔ)篇 1屏镊、1 屬性和成員變量的區(qū)別 ? 1依疼、11 涉及到的問題是類的分類中是否可以添加屬性。 肯定是可以添...
    奮斗的螻蟻閱讀 373評(píng)論 0 9
  • hive 已經(jīng)自動(dòng)mapjoin優(yōu)化而芥,將小表載入到內(nèi)存律罢;不需要再mapjoin 設(shè)置。但是skewjoin 還是得...
    活著活法閱讀 1,096評(píng)論 0 2