iOS知識點

9.UIView和CALayer是啥關(guān)系做裙?

1.UIView是iOS系統(tǒng)中界面元素的基礎岗憋,所有的界面元素都繼承自它。它本身完全是由CoreAnimation來實現(xiàn)的 (Mac下似乎不是這樣)锚贱。它真正的繪圖部分仔戈,是由一個叫CALayer(Core Animation Layer)的類來管理。 UIView本身拧廊,更像是一個CALayer的管理器监徘,訪問它的跟繪圖和跟坐標有關(guān)的屬性,例如frame吧碾,bounds等 等凰盔,實際上內(nèi)部都是在訪問它所包含的CALayer的相關(guān)屬性。

2.UIView有個layer屬性倦春,可以返回它的主CALayer實例户敬,UIView有一個layerClass方法,返回主layer所使用的 類睁本,UIView的子類尿庐,可以通過重載這個方法,來讓UIView使用不同的CALayer來顯示呢堰,例如通過

- (class) layerClass {

     return ([CAEAGLLayer class]);
}

=使某個UIView的子類使用GL來進行繪制抄瑟。

3.UIView的CALayer類似UIView的子View樹形結(jié)構(gòu),也可以向它的layer上添加子layer枉疼,來完成某些特殊的表 示皮假。例如下面的代碼

grayCover = [[CALayer alloc] init];

grayCover.backgroundColor = [[[UIColor blackColor] colorWithAlphaComponent:0.2] CGColor];

[self.layer addSubLayer: grayCover];

會在目標View上敷上一層黑色的透明薄膜。

4.UIView的layer樹形在系統(tǒng)內(nèi)部往衷,被系統(tǒng)維護著三份copy(這段理解有點吃不準)钞翔。
邏輯樹,就是代碼里可以操縱的席舍,例如更改layer的屬性等等就在這一份布轿。
動畫樹,這是一個中間層来颤,系統(tǒng)正在這一層上更改屬性汰扭,進行各種渲染操作。
顯示樹福铅,這棵樹的內(nèi)容是當前正被顯示在屏幕上的內(nèi)容萝毛。

這三棵樹的邏輯結(jié)構(gòu)都是一樣的,區(qū)別只有各自的屬性滑黔。

10. 如何高性能的給UIImageView加個圓角笆包?(不準說layer.cornerRadius!)

我覺得應該是使用Quartz2D直接繪制圖片,得把這個看看环揽。 步驟:
  a、創(chuàng)建目標大小(cropWidth庵佣,cropHeight)的畫布歉胶。
  b、使用UIImage的drawInRect方法進行繪制的時候巴粪,指定rect為(-x通今,-y,width肛根,height)辫塌。
  c、從畫布中得到裁剪后的圖像派哲。

- (UIImage*)cropImageWithRect:(CGRect)cropRect
{
CGRect drawRect = CGRectMake(-cropRect.origin.x , -cropRect.origin.y, self.size.width * self.scale, self.size.height * self.scale);

UIGraphicsBeginImageContext(cropRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, CGRectMake(0, 0, cropRect.size.width, cropRect.size.height));

[self drawInRect:drawRect];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image;
}

@end

11. 使用drawRect有什么影響臼氨?(這個可深可淺,你至少得用過狮辽。一也。)

drawRect方法依賴Core Graphics框架來進行自定義的繪制,但這種方法主要的缺點就是它處理touch事件的方式:每次按鈕被點擊后喉脖,都會用setNeddsDisplay進行強制重繪;而且不止一次抑月,每次單點事件觸發(fā)兩次執(zhí)行树叽。這樣的話從性能的角度來說,對CPU和內(nèi)存來說都是欠佳的谦絮。特別是如果在我們的界面上有多個這樣的UIButton實例题诵。

12. ASIHttpRequest或者SDWebImage里面給UIImageView加載圖片的邏輯是什么樣的?

詳見SDWebImage的實現(xiàn)流程 http://www.cnblogs.com/6duxz/p/4159572.html

13. 麻煩你設計個簡單的圖片內(nèi)存緩存器(移除策略是一定要說的)

圖片的內(nèi)存緩存层皱,可以考慮將圖片數(shù)據(jù)保存到一個數(shù)據(jù)模型中性锭。所以在程序運行時這個模型都存在內(nèi)存中。 移除策略:釋放數(shù)據(jù)模型對象叫胖。

14. 講講你用Instrument優(yōu)化動畫性能的經(jīng)歷吧(別問我什么是Instrument)

可以參考iOS App性能優(yōu)化

15. loadView是干嘛用的草冈?

當你訪問一個ViewController的view屬性時,如果此時view的值是nil瓮增,那么怎棱,ViewController就會自動調(diào)用loadView這個方法。這個方法就會加載或者創(chuàng)建一個view對象绷跑,賦值給view屬性拳恋。 loadView默認做的事情是:如果此ViewController存在一個對應的nib文件,那么就加載這個nib砸捏。否則谬运,就創(chuàng)建一個UIView對象隙赁。
如果你用Interface Builder來創(chuàng)建界面,那么不應該重載這個方法梆暖。
如果你想自己創(chuàng)建view對象鸳谜,那么可以重載這個方法。此時你需要自己給view屬性賦值式廷。你自定義的方法不應該調(diào)用super咐扭。如果你需要對view做一些其他的定制操作,在viewDidLoad里面去做滑废。
=========================================
根據(jù)上面的文檔可以知道蝗肪,有兩種情況:
1、如果你用了nib文件蠕趁,重載這個方法就沒有太大意義薛闪。因為loadView的作用就是加載nib。如果你重載了這個方法不調(diào)用super俺陋,那么nib文件就不會被加載豁延。如果調(diào)用了super,那么view已經(jīng)加載完了腊状,你需要做的其他事情在viewDidLoad里面做更合適诱咏。
2、如果你沒有用nib缴挖,這個方法默認就是創(chuàng)建一個空的view對象袋狞。如果你想自己控制view對象的創(chuàng)建,例如創(chuàng)建一個特殊尺寸的view映屋,那么可以重載這個方法苟鸯,自己創(chuàng)建一個UIView對象,然后指定 self.view = myView; 但這種情況也沒有必要調(diào)用super棚点,因為反正你也不需要在super方法里面創(chuàng)建的view對象早处。如果調(diào)用了super,那么就是浪費了一些資源而已 參考:http://www.cnblogs.com/dyllove98/archive/2013/06/06/3123005.html

16. viewWillLayoutSubView你總是知道的瘫析。

橫豎屏切換的時候砌梆,系統(tǒng)會響應一些函數(shù),其中 viewWillLayoutSubviews 和 viewDidLayoutSubviews颁股。

- (void)viewWillLayoutSubviews

{

 [self _shouldRotateToOrientation:(UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation];

}

-(void)_shouldRotateToOrientation:(UIDeviceOrientation)orientation {
    if (orientation == UIDeviceOrientationPortrait ||orientation ==
            UIDeviceOrientationPortraitUpsideDown) {
      // 豎屏
}
else {
     // 橫屏
}
}

通過上述一個函數(shù)就知道橫豎屏切換的接口了么库。 注意:viewWillLayoutSubviews只能用在ViewController里面,在view里面沒有響應甘有。

17. GCD里面有哪幾種Queue诉儒?你自己建立過串行queue嗎?背后的線程模型是什么樣的亏掀?

1.主隊列 dispatch_main_queue() 串行 忱反,更新UI
2.全局隊列 dispatch_global_queue() 并行
3.自定義隊列 dispatch_queue_t queue 可以自定義是并行DISPATCH_QUEUE_CONCURRENT 或者串行DISPATCH_QUEUE_SERIAL

18. 用過coredata或者sqlite嗎泛释?讀寫是分線程的嗎?遇到過死鎖沒温算?咋解決的怜校?

參考:CoreData與SQLite的線程安全

19. http的post和get啥區(qū)別?(區(qū)別挺多的注竿,麻煩多說點)

1.GET請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭中)茄茁,以?分割URL和傳輸數(shù)據(jù),參數(shù)之間以&相連巩割,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD裙顽。如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送宣谈,如果是空格愈犹,轉(zhuǎn)換為+,如果是中文/其他字符闻丑,則直接把字符串用BASE64加密漩怎,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進制表示的ASCII嗦嗡。   POST把提交的數(shù)據(jù)則放置在是HTTP包的包體中勋锤。

2.”GET方式提交的數(shù)據(jù)最多只能是1024字節(jié),理論上POST沒有限制酸钦,可傳較大量的數(shù)據(jù)怪得,IIS4中最大為80KB,IIS5中為100KB”卑硫??蚕断!
以上這句是我從其他文章轉(zhuǎn)過來的欢伏,其實這樣說是錯誤的,不準確的:
(1).首先是”GET方式提交的數(shù)據(jù)最多只能是1024字節(jié)”亿乳,因為GET是通過URL提交數(shù)據(jù)硝拧,那么GET可提交的數(shù)據(jù)量就跟URL的長度有直接關(guān)系了。而實際上葛假,URL不存在參數(shù)上限的問題障陶,HTTP協(xié)議規(guī)范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制聊训。IE對URL長度的限制是2083字節(jié)(2K+35)抱究。對于其他瀏覽器,如Netscape带斑、FireFox等鼓寺,理論上沒有長度限制勋拟,其限制取決于[操作系統(tǒng)](http://lib.csdn.net/base/operatingsystem)的支持。
注意這是限制是整個URL長度,而不僅僅是你的參數(shù)值數(shù)據(jù)長度。[見參考資料5]

(2).理論上講挡逼,POST是沒有大小限制的什往,HTTP協(xié)議規(guī)范也沒有進行大小限制,說“POST數(shù)據(jù)量存在80K/100K的大小限制”是不準確的邑闲,POST數(shù)據(jù)是沒有限制的,起限制作用的是服務器的處理程序的處理能力。

3.在ASP中纺念,服務端獲取GET請求參數(shù)用Request.QueryString,獲取POST請求參數(shù)用Request.Form所计。在JSP中柠辞,用request.getParameter(\”XXXX\”)來獲取,雖然jsp中也有request.getQueryString()方法主胧,但使用起來比較麻煩叭首,比如:傳一個test.jsp?name=hyddd&password=hyddd,用request.getQueryString()得到的是:name=hyddd&password=hyddd踪栋。在[PHP](http://lib.csdn.net/base/php)中焙格,可以用GET和
_POST分別獲取GET和POST中的數(shù)據(jù),而REQUEST則可以獲取GET和POST兩種請求中的數(shù)據(jù)夷都。值得注意的是眷唉,JSP中使用request和PHP中使用
_REQUEST都會有隱患,這個下次再寫個文章總結(jié)囤官。

4.POST的安全性要比GET的安全性高冬阳。注意:這里所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數(shù)據(jù)修改党饮,而這里安全的含義是真正的Security的含義肝陪,比如:通過GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上刑顺,因為(1)登錄頁面有可能被瀏覽器緩存氯窍,(2)其他人查看瀏覽器的歷史紀錄,那么別人就可以拿到你的賬號和密碼了蹲堂,除此之外狼讨,使用GET提交數(shù)據(jù)還可能會造成Cross-site request forgery攻擊。
總結(jié)一下柒竞,Get是向服務器發(fā)索取數(shù)據(jù)的一種請求政供,而Post是向服務器提交數(shù)據(jù)的一種請求,在FORM(表單)中,Method默認為”GET”鲫骗,實質(zhì)上犬耻,GET和POST只是發(fā)送機制不同,并不是一個取一個發(fā)执泰!

20. 我知道你大學畢業(yè)過后就沒接觸過算法數(shù)據(jù)結(jié)構(gòu)了枕磁,但是請你一定告訴我什么是Binary search tree? search的時間復雜度是多少?

Binary search tree:二叉搜索樹术吝。 主要由四個方法:(用C語言實現(xiàn)或者Python) 1.search:時間復雜度為O(h)计济,h為樹的高度
2.traversal:時間復雜度為O(n),n為樹的總結(jié)點數(shù)排苍。
3.insert:時間復雜度為O(h)沦寂,h為樹的高度。
4.delete:最壞情況下淘衙,時間復雜度為O(h)+指針的移動開銷传藏。
可以看到,二叉搜索樹的dictionary operation的時間復雜度與樹的高度h相關(guān)彤守。所以需要盡可能的降低樹的高度毯侦,由此引出平衡二叉樹Balanced binary tree。它要求左右兩個子樹的高度差的絕對值不超過1具垫,并且左右兩個子樹都是一棵平衡二叉樹侈离。這樣就可以將搜索樹的高度盡量減小。常用算法有紅黑樹筝蚕、AVL卦碾、Treap、伸展樹等起宽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洲胖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坯沪,更是在濱河造成了極大的恐慌宾濒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屏箍,死亡現(xiàn)場離奇詭異,居然都是意外死亡橘忱,警方通過查閱死者的電腦和手機赴魁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钝诚,“玉大人颖御,你說我怎么就攤上這事。” “怎么了潘拱?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵疹鳄,是天一觀的道長。 經(jīng)常有香客問我芦岂,道長瘪弓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任禽最,我火速辦了婚禮腺怯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘川无。我一直安慰自己呛占,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布懦趋。 她就那樣靜靜地躺著晾虑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仅叫。 梳的紋絲不亂的頭發(fā)上帜篇,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音惑芭,去河邊找鬼坠狡。 笑死,一個胖子當著我的面吹牛遂跟,可吹牛的內(nèi)容都是我干的逃沿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼幻锁,長吁一口氣:“原來是場噩夢啊……” “哼凯亮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哄尔,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤假消,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岭接,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體富拗,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年鸣戴,在試婚紗的時候發(fā)現(xiàn)自己被綠了啃沪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡窄锅,死狀恐怖创千,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤追驴,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布械哟,位于F島的核電站,受9級特大地震影響殿雪,放射性物質(zhì)發(fā)生泄漏暇咆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一冠摄、第九天 我趴在偏房一處隱蔽的房頂上張望糯崎。 院中可真熱鬧,春花似錦河泳、人聲如沸沃呢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薄霜。三九已至,卻和暖如春纸兔,著一層夾襖步出監(jiān)牢的瞬間惰瓜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工汉矿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崎坊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓洲拇,卻偏偏與公主長得像奈揍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赋续,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 1. 什么是arc男翰?(arc是為了解決什么問題誕生的?) ARC的全稱是Automatic Reference C...
    Nidalee丶閱讀 434評論 0 1
  • 這些知識點是從網(wǎng)上各個地方看到的纽乱,非原創(chuàng)蛾绎,僅是總結(jié)。 1.UIWindow和UIView和 CALayer 的聯(lián)系...
    tiGress閱讀 131評論 0 2
  • 7鸦列、不使用IB是租冠,下面這樣做有什么問題? 6薯嗤、請說說Layer和View的關(guān)系肺稀,以及你是如何使用它們的。 1.首先...
    AlanGe閱讀 680評論 0 1
  • 1. 什么是 ARC? (ARC 是為了解決什么問題而誕生的?) ARC 是 Automatic Referenc...
    milk_powder閱讀 679評論 0 5
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,160評論 30 470