這篇文章距離第一篇時(shí)間有很長乡范,一是準(zhǔn)備好好想想怎么正式開篇凛忿,二確實(shí)是忘了(哈哈)下面進(jìn)入正題酿矢,簡單談?wù)刬os之oc
Object-C是一門新興的語言絮缅,于2013年大規(guī)模被中國開發(fā)者應(yīng)用,我是在2014年開始接觸ios由學(xué)長推薦荠锭,大家都知道學(xué)習(xí)一門新語言是非常難的旱眯,剛開始學(xué)的時(shí)候很無趣,還需要mac電腦,花費(fèi)比較多删豺。當(dāng)時(shí)買的一臺(tái)二手mac勉強(qiáng)夠用共虑,就這樣真實(shí)開始踏入ios的道路上(主要還是挺說工資高~哈哈)。
下面寫的距離上面已經(jīng)有半年時(shí)間呀页,看著挺幼稚妈拌,但是也沒有刪除的欲望就留著了,下面記錄下最近的總結(jié)蓬蝶。以前看過別人的ios學(xué)習(xí)經(jīng)驗(yàn)總結(jié)尘分,感覺還不錯(cuò),所以準(zhǔn)備自己總結(jié)一下丸氛,其實(shí)就是照著敲一遍培愁,順便寫點(diǎn)自己想說的話,加深印象雪位。
一:簡述你對UIView竭钝、UIVindow、CALayer的認(rèn)識(shí)
UIView繼承UIResponder:NSObject雹洗,所以他是可以響應(yīng)事件的
UIVindow直接從NSObject繼承香罐,所以他不能相應(yīng)事件
1:它們分別所屬的框架不同
1、UIView是在/System/Library/Frameworks/UIKit.framework中定義的时肿。屬于UIkit.framework框架,負(fù)責(zé)渲染矩形區(qū)域的內(nèi)容,為矩形區(qū)域添加動(dòng)畫,響應(yīng)區(qū)域的觸摸事件庇茫,布局,和管理一個(gè)或多個(gè)子視圖 螃成。
2旦签、CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的。而且CALayer作為一個(gè)低級(jí)的可以承載繪制內(nèi)容的底層對象出現(xiàn)在該框架中寸宏。UIView與CALayer的最大區(qū)別在于UIView可以響應(yīng)用戶事件宁炫,而CALayer不可以。UIView側(cè)重于對顯示內(nèi)容的管理氮凝,CALayer側(cè)重于對內(nèi)容的繪制羔巢。由此可見UIView確實(shí)是CALayer 的高級(jí)封裝。
3罩阵、UIWindow:屬于UIKit.framework框架,是一種特殊的UIView,通常在一個(gè)程序中只會(huì)有一個(gè)UIWindow,但可以手動(dòng)創(chuàng)建多個(gè)UIWindow,同時(shí)加到程序里面竿秆。主要起到三個(gè)作用:(1)作為容器,包含App程序所要顯示的所有視圖(2)傳遞觸摸消息到其他的UIView和其他對象(3)與UIViewController協(xié)同工作,方便完成設(shè)備方向旋轉(zhuǎn)的支持
2:UIwindow是UIView的子類
UIwindow是UIView的子類,UIWindow的主要作用:一是提供一個(gè)區(qū)域來顯示UIView稿壁,二是將事件(event)的分發(fā)給UIView幽钢,一個(gè)應(yīng)用基本上只有一個(gè)UIWindow.iOS程序啟動(dòng)完畢后,創(chuàng)建的第一個(gè)視圖控件就是UIWindow傅是,接著創(chuàng)建控制器的view匪燕,最后將控制器的view添加到UIWindow上蕾羊,于是控制器的view就顯示在屏幕上了。一個(gè)iOS程序之所以能顯示到屏幕上谎懦,完全是因?yàn)樗蠻IWindow肚豺。即沒有UIWindow,就看不見任何UI界面界拦。
二:聲明一個(gè)屬性是,copy和strong的區(qū)別
簡單來說梗劫,聲明的對象 去操作不可變對象如NSarray享甸,copy是淺拷貝引用計(jì)數(shù)+1,改變數(shù)組中的內(nèi)容 ?對象也會(huì)改變
聲明的對象? 去操作可變對象如NSMutableArray? copy是深拷貝? 改變數(shù)組中的內(nèi)容梳侨,蛉威,copy對象不會(huì)改變:http://www.reibang.com/p/2c1cec65f5af
三:實(shí)例方法和類方法的區(qū)別與聯(lián)系
實(shí)例方法就是 需要先對類實(shí)例化才能調(diào)用的方法,類方法是直接可以用類名調(diào)用的方法
四:setvalue 和setobject有什么區(qū)別
1, setObject:forkey:中value是不能夠?yàn)閚il的走哺,不然會(huì)報(bào)錯(cuò)蚯嫌。setValue:forKey:中value能夠?yàn)閚il,但是當(dāng)value為nil的時(shí)候丙躏,會(huì)自動(dòng)調(diào)用removeObject:forKey方法
2, setValue:forKey:中key的參數(shù)只能夠是NSString類型择示,而setObject:forKey:的可以是任何類型
注意:setObject:forKey:對象不能存放nil要與下面的這種情況區(qū)分:
1,?[imageDictionarysetObject:[NSNullnull]forKey:indexNumber]; ? ?[NSNullnull]表示的是一個(gè)空對象,并不是nil晒旅,注意這點(diǎn)
2, setObject:forKey:中Key是NSNumber對象的時(shí)候栅盲,如下:[imageDictionarysetObject:objforKey:[NSNumber numberWithInt:10]];
注意:
上面說的區(qū)別是針對調(diào)用者是dictionary而言的。
setObject:forKey:方法NSMutabledictionary特有的,而
setValue:forKey:方法是KVC(鍵-值編碼)的主要方法废恋。
當(dāng) setValue:forKey:方法調(diào)用者是對象的時(shí)候:
setValue:forKey:方法是在NSObject對象中創(chuàng)建的谈秫,也就是說所有的oc對象都有這個(gè)方法,所以可以用于任何類鱼鼓。
比如使用:
SomeClass *someObj = [[SomeClass alloc] init];
[someObj setValue:self forKey:@"delegate"];
表示的意思是:對象someObj設(shè)置他的delegate屬性的值為當(dāng)前類拟烫,當(dāng)然調(diào)用此方法的對象必須要有delegate屬性才能設(shè)置,不然調(diào)用了也沒效果: http://blog.csdn.net/itianyi/article/details/8661997
未完待續(xù)~~