OC語(yǔ)言基本概念

基本概念

  • oc面向?qū)ο笳Z(yǔ)言,只需關(guān)注具有相關(guān)功能的對(duì)象待错,不必親力親為。
  • oc面向?qū)ο蟮娜筇匦裕悍庋b皂林、繼承(拷貝一份父類的方法屬性成員變量朗鸠,方法可重寫,屬性成員變量不可础倍。繼承就擁有,擁有的成員變量不一定可訪問(wèn))胎挎、多態(tài)(多種表現(xiàn)形態(tài)沟启,代碼表現(xiàn)為父類指針指向子類對(duì)象,運(yùn)行時(shí)判斷真實(shí)類型犹菇,調(diào)用子類方法)
  • 繼承:繼承父類的子類.m無(wú)法通過(guò)下劃線直接調(diào)用父類的私有變量德迹,需要調(diào)用self的getter方法,本質(zhì)會(huì)去調(diào)用父類此變量的getter方法揭芍。若父類變量為成員變量胳搞,子類在.m中也可訪問(wèn)(看修飾符)
  • 源文件: .h .m .mm(oc與c++混編) ,快捷鍵:command + control + ↑切換.h.m称杨。
  • 類:方法屬性的集合,也是一個(gè)對(duì)象肌毅,本質(zhì)是結(jié)構(gòu)體
  • 對(duì)象:實(shí)例對(duì)象其地址為第0個(gè)屬性isa的地址,實(shí)例對(duì)象創(chuàng)建時(shí)系統(tǒng)會(huì)自動(dòng)創(chuàng)建類對(duì)象姑原,其中包含當(dāng)前實(shí)例對(duì)象的所有方法悬而。繼承與NSObject的對(duì)象需要內(nèi)存管理,對(duì)象存放在堆锭汛。
  • 匿名對(duì)象:[Person new] (開(kāi)辟存貯空間笨奠,初始化屬性,返回指針地址)
  • 成員變量(屬性唤殴、實(shí)例變量):寫在類聲明中的{}中的變量般婆,只可通過(guò)對(duì)象訪問(wèn),離開(kāi)類不是成員變量朵逝。不能在定義的同時(shí)進(jìn)行初始化蔚袍。不可用static修飾。存貯于當(dāng)前對(duì)象對(duì)應(yīng)的堆的存儲(chǔ)空間中(需手動(dòng)釋放)廉侧。
  • 成員變量修飾符:在類聲明中{}內(nèi)的即是成員變量@public:可以在其他類p-->_age页响、本類_age篓足、子類_age中訪問(wèn);@private可以在本類訪問(wèn)闰蚕,不可以在其他類栈拖、子類中訪問(wèn),子類不可訪問(wèn)即是繼承即擁有父類的成員變量没陡,擁有但是不可訪問(wèn)涩哟,均提示錯(cuò)誤;@protected可以在本類盼玄、子類中訪問(wèn)贴彼,不可以在其他類訪問(wèn);默認(rèn)是此修飾符@package在當(dāng)前代碼所在的包中訪問(wèn)等于public埃儿,在其他包中訪問(wèn)等于private器仗。
  • 私有變量:寫在@implementation中的{}的成員變量,就是私有的成員變量童番,其他類無(wú)法查看訪問(wèn)(區(qū)別于成員變量使用@private修飾精钮,雖然私有,但是其他類是可以可查看的剃斧。而私有變量完全私有轨香,其它類無(wú)法通過(guò)指針p-->_age查看。由此@property生成的變量屬于私有變量)
  • 局部變量:寫在函數(shù)或者代碼塊中的變量幼东。存貯于棧中(離開(kāi)作用域系統(tǒng)釋放)臂容,作用域至大括號(hào)或者return。
  • 全局變量:寫在函數(shù)和大括號(hào)外的變量根蟹。作用域從定義的那一行至文件末尾脓杉。存儲(chǔ)于靜態(tài)區(qū)(程序啟動(dòng)就會(huì)分配存貯空間,直到程序結(jié)束才會(huì)釋放)
  • 私有方法:只有實(shí)現(xiàn)娜亿,沒(méi)有聲明丽已。也可調(diào)用,沒(méi)有真正的私有方法(id定義類對(duì)象或performSelector)
  • 構(gòu)造方法:以init開(kāi)頭的方法买决,可自定義構(gòu)造方法(對(duì)象方法沛婴,instancetype,initW)督赤。重寫構(gòu)造方法先初始化父類嘁灯,返回子類對(duì)象地址,在設(shè)置子類屬性躲舌,返回self丑婿。
  • 類工廠方法:分配初始化實(shí)例,返回一個(gè)自己實(shí)例的類方法,用于快速創(chuàng)建對(duì)象羹奉。(類方法秒旋,以類名稱開(kāi)頭,首字母小寫诀拭,instancetype)自定義類工廠方法是蘋果的一個(gè)規(guī)范迁筛,創(chuàng)建對(duì)象往往有對(duì)應(yīng)的自定義構(gòu)造方法和自定義類工廠方法。
  • 分類:(類別耕挨,類目)不修改原類的基礎(chǔ)上為類修改一些方法细卧。不能擴(kuò)充成員變量,而@property只會(huì)生成getter/setter方法聲明筒占,不會(huì)生成實(shí)現(xiàn)及私有變量贪庙。可在在分類中訪問(wèn)原類.h中的屬性翰苫。分類方法會(huì)覆蓋原有類的方法止邮。多個(gè)分類方法覆蓋原方法,會(huì)執(zhí)行最后一個(gè)參與編譯的分類中的方法奏窑。
  • 匿名分類:(延展類別农尖,類擴(kuò)展)為某個(gè)類擴(kuò)充一些私有的屬性和方法。無(wú)別名良哲,可以擴(kuò)充屬性。
  • 協(xié)議:只可聲明方法助隧。@interface PersonProtocol<NSObject>協(xié)議遵守其它協(xié)議筑凫,就會(huì)有父協(xié)議的方法。對(duì)具有功能的對(duì)象進(jìn)行限制:id<PersonProtocol>delegate;
  • 代理:設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn)并村,使代碼編制工程化巍实。應(yīng)用:當(dāng)A對(duì)象想要監(jiān)聽(tīng)B對(duì)象的變化;B對(duì)象發(fā)生一些變化哩牍,想要通知A對(duì)象棚潦;當(dāng)對(duì)象B無(wú)法處理某些行為的時(shí)候,想讓對(duì)象A處理膝昆,A即是B對(duì)象的代理對(duì)象丸边。
  • 淺拷貝:不可變對(duì)象copy,不會(huì)生成新對(duì)象荚孵。
  • 深拷貝:一般是深拷貝妹窖,會(huì)生成新對(duì)象。
  • 動(dòng)態(tài)數(shù)據(jù)類型:id(NSObject * 靜態(tài)數(shù)據(jù)類型收叶,萬(wàn)能指針)骄呼,即父類指針指向子類對(duì)象,調(diào)用子類(真實(shí)類型)特有方法,通過(guò)動(dòng)態(tài)數(shù)據(jù)類型調(diào)用(多態(tài)蜓萄,避免強(qiáng)轉(zhuǎn))隅茎。也可調(diào)用真實(shí)類型的私有方法,在運(yùn)行時(shí)知道對(duì)象的真實(shí)類型嫉沽。調(diào)用不屬于自己真實(shí)類型的方法編譯時(shí)不會(huì)報(bào)錯(cuò)辟犀,導(dǎo)致運(yùn)行時(shí)錯(cuò)誤,為避免耻蛇,可用iskindofclass等踪蹬。
  • 野指針:對(duì)象被釋放了成為僵尸對(duì)象,指向僵尸對(duì)象的指針臣咖。
  • MRC:Manul Referance Counting 引用計(jì)數(shù)retaincount為0時(shí)調(diào)用對(duì)象的dealloc方法跃捣。MRC轉(zhuǎn)ARC:buildsetting- automatic r,edit convert to object arc夺蛇;文件轉(zhuǎn)換:targets-buildpases-compilesources(參與編譯的文件順序)--fno-object-arc疚漆。
  • ARC:Automatic Referance Counting 是編譯器特性,不是運(yùn)行時(shí)特性刁赦,與其他語(yǔ)言中的垃圾回收機(jī)制有本質(zhì)區(qū)別娶聘。只要有一個(gè)強(qiáng)指針(默認(rèn)都是強(qiáng))指向?qū)ο螅瑢?duì)象就不會(huì)釋放甚脉。assign分為assign對(duì)基本數(shù)據(jù)類型丸升,weak對(duì)對(duì)象類型,如代理delegate牺氨。
  • 點(diǎn)語(yǔ)法:是編譯器的特性狡耻,會(huì)在程序翻譯成二進(jìn)制的時(shí)候?qū)Ⅻc(diǎn)語(yǔ)法自動(dòng)換回getter/setter方法。
  • 內(nèi)存泄漏:如果程序運(yùn)行時(shí)一直分配內(nèi)存而不及時(shí)釋放無(wú)用的內(nèi)存猴凹,程序占用的內(nèi)存越來(lái)越大夷狰,直到把系統(tǒng)分配給該APP的內(nèi)存消耗殫盡,程序因無(wú)內(nèi)存可用導(dǎo)致崩潰郊霎。
  • 內(nèi)存管理:MRC:一次alloc沼头,retain 以及 copy中淺拷貝,對(duì)應(yīng)一次release书劝。深拷貝进倍,生成新對(duì)象,系統(tǒng)不會(huì)對(duì)以前的對(duì)象retain庄撮,所以對(duì)新對(duì)象和原對(duì)象分別release背捌。對(duì)象添加到數(shù)組,對(duì)象會(huì)retain洞斯,數(shù)組remove或者數(shù)組release毡庆,會(huì)對(duì)此對(duì)象release坑赡。
  • 循環(huán)引用:A對(duì)象擁有B對(duì)象,B擁有A么抗。ARC:一邊strong毅否,一邊weak。MRC:一邊retain蝇刀,一邊assign螟加,使用assign不需要對(duì)其擁有的此對(duì)象release。
  • 強(qiáng)制類型轉(zhuǎn)換:實(shí)際是創(chuàng)建了一個(gè)新的結(jié)構(gòu)體吞琐,賦值給左邊捆探。d1 = (Date){1990,1,15}結(jié)構(gòu)體Date d2 = d1,修改d2不會(huì)影響d1
  • SEL:每個(gè)方法都有與之對(duì)應(yīng)的SEL類型的對(duì)象,根據(jù)SEL對(duì)象就可以找到方法的地址站粟,進(jìn)而調(diào)用方法黍图。根據(jù)對(duì)象方法名包裝成為SEL類型的數(shù)據(jù),根據(jù)此數(shù)據(jù)到該類的類對(duì)象去找相應(yīng)的方法奴烙。配合對(duì)象類調(diào)用方法助被,判斷方法是否實(shí)現(xiàn)。

關(guān)鍵字

  • @property int age切诀;會(huì)為屬性_age生成getter/setter方法的聲明(xcode4.5之前揩环,之后會(huì)自動(dòng)生成聲明和實(shí)現(xiàn),set方法傳入值默認(rèn)賦值給_age)幅虑,編譯器指令丰滑。會(huì)生成私有變量:生成的變量在@implementation中為私有變量,無(wú)論如何修飾皆為私有倒庵。子類無(wú)法直接訪問(wèn)吨枉。若同時(shí)重寫getter/setter方法的實(shí)現(xiàn),不會(huì)自動(dòng)生成私有變量哄芜。或者readonly修飾而又重寫getter也不會(huì)生成柬唯。默認(rèn)修飾符readwrite认臊,assign,atomic锄奢。
  • @synthesize age = _age失晴;實(shí)現(xiàn)age的set方法,把形參age賦值給_age拘央。若不寫涂屁,默認(rèn)賦值給age成員變量, _age無(wú)值灰伟。在沒(méi)有該私有變量情況也會(huì)生成私有變量拆又。 在Xcode4.5及以后的版本中儒旬,可以省略@synthesize,編譯器會(huì)自動(dòng)幫你加上get 和 set 方法的實(shí)現(xiàn)帖族,并且默認(rèn)會(huì)去訪問(wèn)_age這個(gè)成員變量栈源,如果找不到_age這個(gè)成員變量,會(huì)自動(dòng)生成一個(gè)叫做 _age的私有成員變量竖般。
  • @class僅僅是告訴編譯器甚垦,后面是一個(gè)類。作用:減小修改低層對(duì)上層(#import預(yù)編譯涣雕,拷貝一份)的影響艰亮,提高編譯效率。另相互拷貝情況下挣郭,若寫一個(gè)還會(huì)造成重復(fù)拷貝迄埃。所以相互拷貝的2個(gè)類都需聲明。
  • @autoreleasepool 只能只要在自動(dòng)釋放池調(diào)用autorelease丈屹,才能將對(duì)象放入自動(dòng)釋放池调俘,多個(gè)自動(dòng)釋放池可嵌套。
  • @dynamic是告訴編譯器屬性會(huì)在運(yùn)行時(shí)實(shí)現(xiàn)getter/setter方法旺垒。

其它

  • instancetype: 在編譯時(shí)可以知道真實(shí)類型彩库,調(diào)用非自己的方法報(bào)警告。只能作為返回值先蒋。類似區(qū)別于id可以作為參數(shù)骇钦,定義數(shù)據(jù)類型,編譯時(shí)不知道類型竞漾。
  • %@打印對(duì)象會(huì)調(diào)用-開(kāi)頭的description眯搭,返回<類名稱: 對(duì)象地址>.打印類對(duì)象會(huì)調(diào)用+開(kāi)頭的description方法。本質(zhì)打印字符串业岁,可重寫打印需要內(nèi)容鳞仙,其中盡量不要使用self獲取成員變量,因其中再次打印self造成死循環(huán)笔时。
  • NsLog自動(dòng)換行棍好,對(duì)C語(yǔ)言支持不好(char *s = "我的",#import自動(dòng)防止重復(fù)拷貝允耿,避免書寫頭文件衛(wèi)士)
  • MRC下set方法流程:1借笙,A對(duì)象使用B對(duì)象,對(duì)B對(duì)象進(jìn)行retain较锡,這樣保證A對(duì)象存在B就存在业稼。2,A對(duì)象釋放需要對(duì)B對(duì)象進(jìn)行release蚂蕴,防止內(nèi)存泄漏低散,例如人對(duì)房子release俯邓。(dealloc中使用self.room = nil,對(duì)擁有的房間進(jìn)行釋放,防止野指針錯(cuò)誤)3谦纱,人換房看成,重新賦值需要對(duì)以前的對(duì)象release,防止以前擁有的未釋放跨嘉。4川慌,重復(fù)賦值導(dǎo)致僵尸對(duì)象及野指針retain發(fā)生錯(cuò)誤。if(_room != room) [_room release],_room = [room retain].
  • copyWithZone會(huì)根據(jù)第一次傳入的zone向上初始化祠乃,即是可以self= [super copyWithZone:zone],子類指針指向父類對(duì)象梦重。
  • 相關(guān)視頻:1.11,12,13==2.03練習(xí)2,4,13,14,15==3.4==4.16,18==5.06亮瓷,07,09,11==8.15==閱讀項(xiàng)目文檔琴拧,修改項(xiàng)目模板,自定義快捷鍵嘱支,signleton單例
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚓胸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子除师,更是在濱河造成了極大的恐慌沛膳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汛聚,死亡現(xiàn)場(chǎng)離奇詭異锹安,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)倚舀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門叹哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人痕貌,你說(shuō)我怎么就攤上這事风罩。” “怎么了舵稠?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵泊交,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我柱查,道長(zhǎng),這世上最難降的妖魔是什么云石? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任唉工,我火速辦了婚禮,結(jié)果婚禮上汹忠,老公的妹妹穿的比我還像新娘淋硝。我一直安慰自己雹熬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布谣膳。 她就那樣靜靜地躺著竿报,像睡著了一般。 火紅的嫁衣襯著肌膚如雪继谚。 梳的紋絲不亂的頭發(fā)上烈菌,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音花履,去河邊找鬼芽世。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诡壁,可吹牛的內(nèi)容都是我干的济瓢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妹卿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旺矾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夺克,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤箕宙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后懊直,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扒吁,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年室囊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雕崩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡融撞,死狀恐怖盼铁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尝偎,我是刑警寧澤饶火,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站致扯,受9級(jí)特大地震影響肤寝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抖僵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一鲤看、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耍群,春花似錦义桂、人聲如沸找筝。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袖裕。三九已至,卻和暖如春溉瓶,著一層夾襖步出監(jiān)牢的瞬間急鳄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工嚷闭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攒岛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓胞锰,卻偏偏與公主長(zhǎng)得像灾锯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗅榕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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