iOS 知識點(1)

整理一些面試題舔亭,先記錄下來散罕,有時間再梳理下。

1职抡、__weak

weak用于防止循環(huán)引用误甚;
使用weak關(guān)鍵字時,不會增加對象的引用計數(shù)擅威。當(dāng)對象引用計數(shù)為0時冈钦,所有使用weak修飾的指針將被賦值為nil;
當(dāng)assign指針?biāo)赶虻膬?nèi)存被釋放之后瞧筛,不會自動賦值為nil较幌,這樣再次引用該指針的時候就會導(dǎo)致野指針操作;
weak修飾的指針自動置為nil乍炉?
weak的實現(xiàn)其實是一個哈希表滤馍。表的key是指針指向?qū)ο蟮牡刂返籽瑅alue是指向該對象的weak指針的地址數(shù)組(這里是數(shù)組此叠,可能是多個指針指向同一個對象)随珠;

  1. 當(dāng)指向?qū)ο蟮闹羔槺粀eak修飾時,對應(yīng)的數(shù)組會增加一個地址窗看。
  2. 當(dāng)對象被廢棄的時候,找到哈希表中以該對象地址為key的記錄软瞎,將所有weak修飾的指針變量的地址置為nil拉讯;
  3. 刪除哈希表中的該記錄;
  4. 從引用計數(shù)表中只锭,刪除廢棄對象地址為key的記錄院尔;
key value
對象的地址 指針地址數(shù)組
... ...

key:weak指針指向?qū)ο蟮牡刂罚?br> value:指向該對象的所有指針的地址數(shù)組;

2纵顾、使用atomic一定是線程安全的嗎栋盹?

atomic 的屬性只是讀寫安全,屬性的讀寫操作都是串行汉额。但并不是線程安全的躏敢,別的線程還能進行讀寫之外的其他操作。線程安全需要開發(fā)者自己來保證讥脐;
noatomic 的屬性所有線程的讀寫操作都是并行,可能導(dǎo)致無法預(yù)料的結(jié)果俱萍。

atomic 和 nonatomic 的區(qū)別在于告丢,系統(tǒng)自動生成的 getter/setter 方法不一樣。如果你自己寫 getter/setter岳颇,那 atomic/nonatomic/retain/assign/copy 這些關(guān)鍵字只起提示作用颅湘,寫不寫都一樣煞肾。

3、高性能的給UIImageView加個圓角

cornerRadius會導(dǎo)致offscreen drawing有性能問題播赁;

4膘茎、loadView

每次訪問UIViewController的view(比如controller.view脚草、self.view)而且view為nil玩讳,loadView方法就會被調(diào)用。

loadView方法是用來負責(zé)創(chuàng)建UIViewController的view熏纯;

默認實現(xiàn)即[super loadView]里面做了什么事情樟澜。

  • 它會先去查找與UIViewController相關(guān)聯(lián)的xib文件,通過加載xib文件來創(chuàng)建UIViewController的view秩贰;
  • 如果沒有找到相關(guān)聯(lián)的xib文件毒费,就會創(chuàng)建一個空白的UIView,然后賦值給UIViewController的view屬性想际,大致如下;

5胡本、使用drawRect有什么影響侧甫?(這個可深可淺,你至少得用過咒锻。僻爽。)

內(nèi)存暴增
如果UIView檢測到-drawRect:方法被調(diào)用了贾惦,它就會為試圖分配一個寄宿圖,這個寄宿圖的像素尺寸等于視圖大小乘以contentsScale碰镜。
-drawRect:方法的背后實際上都是底層的CALayer進行了重繪和保存中間產(chǎn)生的圖片绪颖。

一旦你實現(xiàn)了CALayerDelegate協(xié)議中的-drawLayer:inContext:方法或者UIView中的-drawRect:方法(其實就是前者的包裝方法)甜奄,圖層就創(chuàng)建了一個繪制上下文,這個上下文需要的內(nèi)存可從這個公式得出:圖層寬*圖層高*4 字節(jié)牍氛,寬高的單位均為像素烟阐。它就是內(nèi)存問題的關(guān)鍵

drawRect 的調(diào)用

drawRect是在Controller->loadView, Controller->viewDidLoad 兩方法之后掉用的.所以不用擔(dān)心在控制器中,這些View的drawRect就開始畫了.這樣可以在控制器中設(shè)置一些值給View(如果這些View draw的時候需要用到某些變量值).

1.如果UIView 的 frame大小為0蜒茄,將直接導(dǎo)致drawRect不被調(diào)用。
2.該方法在調(diào)用sizeThatFits后被調(diào)用玩祟,所以可以先調(diào)用sizeToFit計算出size屿聋。然后系統(tǒng)自動調(diào)用drawRect:方法庆聘。
3.通過設(shè)置contentMode屬性值為UIViewContentModeRedraw伙判。那么將在每次設(shè)置或更改frame的時候自動調(diào)用drawRect:黑忱。
4.直接調(diào)用setNeedsDisplay甫煞,或者setNeedsDisplayInRect:觸發(fā)drawRect:.
以上1,2推薦;而3,4不提倡

6常潮、UIView和CALayer是啥關(guān)系?

UIView是CALayer的代理楷力,UIView 主要處理時間,CALayer負責(zé)繪制萧朝。

7检柬、http的post和get啥區(qū)別

操作方式 GET POST
數(shù)據(jù)位置 HTTP包頭 HTTP正文
明文密文 明文 可明可密
數(shù)據(jù)安全 不安全 安全
長度限制 長度較小 支持較大數(shù)據(jù)傳輸
應(yīng)用場景 查詢數(shù)據(jù) 修改數(shù)據(jù)

安全性:相對而言何址,POST的安全性要比GET高,因為GET時原押,參數(shù)數(shù)據(jù)是明文傳輸?shù)南钆ィ鳳OST數(shù)據(jù)則可以加密的;

長度限制:GET數(shù)據(jù)是附在URL之后的署隘,而URL則會受到不同環(huán)境的限制的磁餐,比如說IE對其限制為2K+35,而POST可以傳送更多的數(shù)據(jù)(理論上不受限制羞延,也會受瀏覽器伴箩、操作系統(tǒng)鄙漏、服務(wù)器處理能力等限制);

8巩步、多線程

  • NSThread
  • GCD
  • NSOperation & NSOperationQueue

9桦踊、如何自己高效實現(xiàn)NSUserDefault?

NSUserDefaults是定時把緩存中的數(shù)據(jù)寫入磁盤的籍胯,而不是即時寫入竟闪,為了防止在寫完NSUserDefaults后程序退出導(dǎo)致的數(shù)據(jù)丟失,可以在寫入數(shù)據(jù)后使用synchronize強制立即將數(shù)據(jù)寫入磁盤芒炼。如何高效的實現(xiàn)存儲,應(yīng)該是從這個方向著手本刽。

自定義對象在存取時通過NSData做載體子寓;

10斜友、深拷貝淺拷貝

指針拷貝和內(nèi)容拷貝(創(chuàng)建了新對象);

11国拇、什么是method swizzling?

每個類都有一個方法列表酱吝,存放著selector的名字和對應(yīng)方法實現(xiàn)的映射關(guān)系务热。而IMP就是指向方法實現(xiàn)(類似指針)。method swizzling可以做到運行時更換selector指向?qū)?yīng)方法實現(xiàn)的IMP闪湾。比如selectorA指向A實現(xiàn)绩卤,selectorB指向B實現(xiàn)娘纷,更換兩個方法的IMP后赖晶,selectorA調(diào)用的就是B實現(xiàn)了遏插。

12胳嘲、窮舉iOS下所有的本地持久化方案

  • plist文件(屬性列表)
  • preference(偏好設(shè)置)
  • NSKeyedArchiver(歸檔)
  • SQLite 3
  • CoreData
  • 沙盒

沙盒目錄:
“應(yīng)用程序包”
Documents
Library
->Caches
->Preferences
tmp
目錄特性:
"應(yīng)用程序包": 這里面存放的是應(yīng)用程序的源文件了牛,包括資源文件和可執(zhí)行文件鹰祸。

NSString *path = [[NSBundle mainBundle] bundlePath];

Documents: 最常用的目錄蛙婴,iTunes同步該應(yīng)用時會同步此文件夾中的內(nèi)容街图,適合存儲重要數(shù)據(jù)餐济。

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;

Library/Caches: iTunes不會同步此文件夾颤介,適合存儲體積大滚朵,不需要備份的非重要數(shù)據(jù)韵吨。

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;

Library/Preferences: iTunes同步該應(yīng)用時會同步此文件夾中的內(nèi)容归粉,通常保存應(yīng)用的設(shè)置信息糠悼。

tmp: iTunes不會同步此文件夾倔喂,系統(tǒng)可能在應(yīng)用沒運行時就刪除該目錄下的文件席噩,所以此目錄適合保存應(yīng)用中的一些臨時文件悼枢,用完就刪除馒索。

NSString *path = NSTemporaryDirectory();

13.通過[UIImage imageNamed:]生成的對象什么時候被釋放双揪?

14运吓、用過coredata或者sqlite嗎拘哨?讀寫是分線程的嗎倦青?遇到過死鎖沒?咋解決的踢步?

15获印、設(shè)計個簡單的圖片內(nèi)存緩存器

寫一個FIFO的存儲機制,設(shè)置一定量的內(nèi)存大小鳍征。每次添加新的圖片后檢查是否超出容量艳丛,如果超出則釋放隊列最前面的圖片。

16眶蕉、Binary search tree

時間復(fù)雜度 log(n)
未完待續(xù)...

本文有些許內(nèi)容來自其他博客造挽,如有侵權(quán),請聯(lián)系谐丢。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹄葱,更是在濱河造成了極大的恐慌图云,老刑警劉巖吮螺,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡泉蝌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雌桑,你說我怎么就攤上這事∪鲎伲” “怎么了掸绞?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵烫幕,是天一觀的道長磷斧。 經(jīng)常有香客問我,道長侣颂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任攻询,我火速辦了婚禮谋逻,結(jié)果婚禮上毁兆,老公的妹妹穿的比我還像新娘。我一直安慰自己茎芭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雀费,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逛漫,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天枷踏,我揣著相機與錄音,去河邊找鬼掏熬。 笑死,一個胖子當(dāng)著我的面吹牛疮丛,可吹牛的內(nèi)容都是我干的锰茉。 我是一名探鬼主播咐刨,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼定鸟!你這毒婦竟也來了著瓶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤材原,失蹤者是張志新(化名)和其女友劉穎沸久,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體余蟹,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年窑睁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葵孤。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡担钮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尤仍,到底是詐尸還是另有隱情箫津,我是刑警寧澤宰啦,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站赡模,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诫肠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一栋豫、第九天 我趴在偏房一處隱蔽的房頂上張望谚殊。 院中可真熱鬧丧鸯,春花似錦嫩絮、人聲如沸围肥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杠步。三九已至,卻和暖如春幽歼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甸私。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工皇型, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诬烹,地道東北人犀被。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓椅您,卻偏偏與公主長得像寡键,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子西轩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

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

  • 1. 什么是 ARC? (ARC 是為了解決什么問題而誕生的?) ARC 是 Automatic Referenc...
    milk_powder閱讀 672評論 0 5
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • 把網(wǎng)上的一些結(jié)合自己面試時遇到的面試題總結(jié)了一下马僻,以后有新的還會再加進來。 1. OC 的理解與特性 OC 作為一...
    AlaricMurray閱讀 2,564評論 0 20
  • 1韭邓,NSObject中description屬性的意義溶弟,它可以重寫嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,143評論 2 19
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,309評論 0 6