問題:
1.淺復(fù)制和深復(fù)制的區(qū)別?
答案:
淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔樈惆纾粡?fù)制引用對(duì)象本身组橄。
深層復(fù)制:復(fù)制引用對(duì)象本身。意思就是說我有個(gè)A對(duì)象政己,復(fù)制一份后得到A_copy對(duì)象后酌壕,對(duì)于淺復(fù)
制來說,A和A_copy指向的是同一個(gè)內(nèi)存資源歇由,復(fù)制的只不過是是一個(gè)指針卵牍,對(duì)象本身資源還是只有
一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改沦泌,這其實(shí)違背了我們復(fù)
制拷貝的一個(gè)思想糊昙。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對(duì)象本身。用網(wǎng)上一哥們通俗的話將就
是:淺復(fù)制好比你和你的影子谢谦,你完蛋释牺,你的影子也完蛋深復(fù)制好比你和你的克隆人,你完蛋回挽,你的克
隆人還活著没咙。
問題:
2.類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別千劈?
答案:
category可以在不獲悉祭刚,不改變?cè)瓉泶a的情況下往里面添加新的方法,只能添加墙牌,不能刪除
修改涡驮。并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法喜滨,因?yàn)轭悇e具有更高的
優(yōu)先級(jí)鹦马。類別主要有3個(gè)作用:
(1)將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中练湿。
(2)創(chuàng)建對(duì)私有方法的前向引用叙谨。
(3)向?qū)ο筇砑臃钦絽f(xié)議嚼隘。
繼承可以增加,擴(kuò)展父類方法辜膝,并且可以增加屬性陌凳。
問題:
3.類別和類擴(kuò)展的區(qū)別。
答案:
category和extensions的不同在于后者可以添加屬性内舟。另外后者添加的方法是必須要實(shí)現(xiàn)的。
extensions可以認(rèn)為是一個(gè)私有的Category初橘。
問題:
4.oc中的協(xié)議和java中的接口概念有何不同验游?
答案:
1> OC中的協(xié)議有2層含義充岛,官方定義為formal和informalprotocol。前者和Java接口一樣耕蝉。
informal protocol中的方法屬于設(shè)計(jì)模式考慮范疇崔梗,不是必須實(shí)現(xiàn)的,但是如果有實(shí)現(xiàn)垒在,就會(huì)改變類
的屬性蒜魄。其實(shí)關(guān)于正式協(xié)議,類別和非正式協(xié)議我很早前學(xué)習(xí)的時(shí)候大致看過场躯,也寫在了學(xué)習(xí)教程里
“非正式協(xié)議概念其實(shí)就是類別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法谈为,你可以使用他們
更好的完成工作”。這個(gè)意思是踢关,這些是可選的伞鲫。比如我門要一個(gè)更好的方法,我們就會(huì)申明一個(gè)這樣
的類別去實(shí)現(xiàn)签舞。然后你在后期可以直接使用這些更好的方法秕脓。這么看,總覺得類別這玩意兒有點(diǎn)像協(xié)議
的可選協(xié)議儒搭。"現(xiàn)在來看吠架,其實(shí)protocal已經(jīng)開始對(duì)兩者都統(tǒng)一和規(guī)范起來操作,因?yàn)橘Y料中說“非正式
協(xié)議使用interface修飾“搂鲫,現(xiàn)在我們看到協(xié)議中兩個(gè)修飾詞:“必須實(shí)現(xiàn)(@requied)”和“可選實(shí)現(xiàn)
(@optional)”傍药。
2>OC中的協(xié)議(formalprotocol)與java中的接口概念基本一致,OC中非正式協(xié)議(informal?
protocol)就是類別默穴。在java中如果繼承了接口怔檩,但不實(shí)現(xiàn)其方法,會(huì)得到一個(gè)error(無法編譯)蓄诽;在
OC中的正式協(xié)議薛训,如果不實(shí)現(xiàn),會(huì)得到一個(gè)warning(可編譯執(zhí)行)仑氛,如果想去除waring乙埃,還可以加
關(guān)鍵字(@optional),讓它可選實(shí)現(xiàn)方法锯岖。
問題:
5.What are KVO and KVC?
答案:kvc:鍵-值編碼是一種間接訪問對(duì)象的屬性使用字符串來標(biāo)識(shí)屬性介袜,而不是通過調(diào)用存取方法,
直接或通過實(shí)例變量訪問的機(jī)制出吹。很多情況下可以簡化程序代碼遇伞。apple文檔其實(shí)給了一個(gè)很好的例
子。kvo:鍵值觀察機(jī)制捶牢,他提供了觀察某一屬性變化的方法鸠珠,極大的簡化了代碼巍耗。具體用看到嗯哼用到
過的一個(gè)地方是對(duì)于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控。比如我自定義的一個(gè)button
kvc是如何找key
對(duì)于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變渐排,理論上來說是和kvc機(jī)制的道理是一樣的炬太。對(duì)于
kvc機(jī)制如何通過key尋找到value:“當(dāng)通過KVC調(diào)用對(duì)象時(shí),比如:[selfvalueForKey:@”someKey”]
時(shí)驯耻,程序會(huì)自動(dòng)試圖通過幾種不同的方式解析這個(gè)調(diào)用亲族。首先查找對(duì)象是否帶有someKey這個(gè)方法,
如果沒找到可缚,會(huì)繼續(xù)查找對(duì)象是否帶有someKey這個(gè)實(shí)例變量(iVar)霎迫,如果還沒有找到,程序會(huì)繼
續(xù)試圖調(diào)用-(id)valueForUndefinedKey:這個(gè)方法城看。如果這個(gè)方法還是沒有被實(shí)現(xiàn)的話女气,程序會(huì)拋出
一個(gè)NSUndefinedKeyException異常錯(cuò)誤。自總結(jié):為什么要把字典轉(zhuǎn)模型,因?yàn)榉乐谷≈禃r(shí)@"錯(cuò)誤",
所以轉(zhuǎn)模型取值時(shí)會(huì)有提示有最后機(jī)會(huì)響應(yīng)該請(qǐng)求.
問題:
6.代理的作用测柠?
答案:
代理的目的是改變或傳遞控制鏈炼鞠。允許一個(gè)類在某些特定時(shí)刻通知到其他類,而不需要獲取到那些類的指針轰胁≮酥鳎可以減少框架復(fù)雜度。另外一點(diǎn)赃阀,代理可以理解為java中的回調(diào)監(jiān)聽機(jī)制的一種類似霎肯。
問題:
7.What are mutable and immutable types in Objective C?
oc中可修改和不可以修改類型。
答案:
可修改不可修改的集合類榛斯。這個(gè)我個(gè)人簡單理解就是可動(dòng)態(tài)添加修改和不可動(dòng)態(tài)添加修改一樣观游。比如
NSArray和NSMutableArray。前者在初始化后的內(nèi)存控件就是固定不可變的驮俗,后者可以添加等懂缕,可以
動(dòng)態(tài)申請(qǐng)新的內(nèi)存空間。
問題:
8.When we call objective c is runtime language what does it mean?
我們說的oc是動(dòng)態(tài)運(yùn)行時(shí)語言是什么意思王凑?
答案:
多態(tài)搪柑。主要是將數(shù)據(jù)類型的確定由編譯時(shí),推遲到了運(yùn)行時(shí)索烹。這個(gè)問題其實(shí)淺涉及到兩個(gè)概念工碾,運(yùn)行時(shí)
和多態(tài)。簡單來說百姓,運(yùn)行時(shí)機(jī)制使我們直到運(yùn)行時(shí)才去決定一個(gè)對(duì)象的類別渊额,以及調(diào)用該類別對(duì)象指定
方法。多態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(life)都
用有一個(gè)相同的方法-eat;那人類屬于生物端圈,豬也屬于生物焦读,都繼承了life后,實(shí)現(xiàn)各自的eat舱权,但是調(diào)
用是我們只需調(diào)用各自的eat方法。也就是不同的對(duì)象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個(gè)
選擇器)仑嗅。
9.what is difference between NSNotification and protocol?
問題:通知和協(xié)議的不同之處宴倍?
答案:協(xié)議有控制鏈(has-a)的關(guān)系,通知沒有仓技。首先我一開始也不太明白鸵贬,什么叫控制鏈(專業(yè)術(shù)語
了~)。但是簡單分析下通知和代理的行為模式脖捻,我們大致可以有自己的理解簡單來說阔逼,通知的話,它
可以一對(duì)多地沮,一條消息可以發(fā)送給多個(gè)消息接受者嗜浮。代理按我們的理解,到不是直接說不能一對(duì)多摩疑,比
如我們知道的明星經(jīng)濟(jì)代理人危融,很多時(shí)候一個(gè)經(jīng)濟(jì)人負(fù)責(zé)好幾個(gè)明星的事務(wù)。只是對(duì)于不同明星間雷袋,代
理的事物對(duì)象都是不一樣的吉殃,一一對(duì)應(yīng),不可能說明天要處理A明星要一個(gè)發(fā)布會(huì)楷怒,代理人發(fā)出處理發(fā)
布會(huì)的消息后蛋勺,別稱B的發(fā)布會(huì)了。但是通知就不一樣鸠删,他只關(guān)心發(fā)出通知抱完,而不關(guān)心多少接收到感興
趣要處理。因此控制鏈(has-a從英語單詞大致可以看出冶共,單一擁有和可控制的對(duì)應(yīng)關(guān)系乾蛤。
自總結(jié):只要指定的對(duì)象遵守了協(xié)議,實(shí)現(xiàn)了代理方法,那么該對(duì)象就成為了代理.
通知,只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣的事要處理.
10.What is push notification?
問題:什么是推送消息?
答案:捅僵。iOS中消息推送機(jī)制又叫消息機(jī)制家卖,其包括兩類:一類是本地通知;另一類是推送通知庙楚,也叫
遠(yuǎn)程通知上荡。兩種通知在iOS中的表現(xiàn)一致,可以通過橫幅或者彈出提醒兩種形式告訴用戶,并且點(diǎn)擊通
知可以會(huì)打開應(yīng)用程序酪捡,但是實(shí)現(xiàn)原理卻完全不同:本地通知是由本地應(yīng)用觸發(fā)的叁征,它是基于時(shí)間行為
的一種通知形式;和本地通知不同,推送通知是由應(yīng)用服務(wù)提供商發(fā)起的逛薇,通過蘋果的APNs(Apple?
Push NotificationServer)發(fā)送到應(yīng)用客戶端,如下圖