iOS基礎練習題

iOS不支持Flash。Adobe計劃在iPhone發行第三方Flash Lite軟件程序,但現時仍未有計劃。以下是小編整理的關於iOS基礎練習題,希望大家認真閱讀!

iOS基礎練習題

erence between shallow copy and deep copy?

淺複製和深複製的區別?

答案:淺層複製:只複製指向對象的指針,而不復制引用對象本身。

深層複製:複製引用對象本身。

意思就是說我有個A對象,複製一份後得到A_copy對象後,對於淺複製來說,A和A_copy指向的是同一個內存資源,複製的只不過是是一個指針,對象本身資源

還是隻有一份,那如果我們對A_copy執行了修改操作,那麼發現A引用的對象同樣被修改,這其實違背了我們複製拷貝的一個思想。深複製就好理解了,內存中存在了

兩份獨立對象本身。

用網上一哥們通俗的話將就是:

淺複製好比你和你的影子,你完蛋,你的影子也完蛋

深複製好比你和你的克隆人,你完蛋,你的克隆人還活着。

is advantage of categories? What is difference between implementing a category and inheritance?

類別的作用?繼承和類別在實現中有何區別?

答案:category 可以在不獲悉,不改變原來代碼的情況下往裏面添加新的方法,只能添加,不能刪除修改。

並且如果類別和原來類中的方法產生名稱衝突,則類別將覆蓋原來的方法,因爲類別具有更高的優先級。

類別主要有3個作用:

(1)將類的實現分散到多個不同文件或多個不同框架中。

(2)創建對私有方法的前向引用。

(3)向對象添加非正式協議。

繼承可以增加,擴展父類方法,並且可以增加屬性。

erence between categories and extensions?

類別和類擴展的區別。

答案:category和extensions的不同在於 後者可以添加屬性。另外後者添加的方法是必須要實現的。

extensions可以認爲是一個私有的Category。

erence between protocol in objective c and interfaces in Java?

oc中的協議和java中的接口概念有何不同?

答案:OC中的協議有2層含義,官方定義爲 formal和informal protocol。前者和Java接口一樣。

informal protocol中的方法屬於設計模式考慮範疇,不是必須實現的,但是如果有實現,就會改變類的屬性。

其實關於正式協議,類別和非正式協議我很早前學習的時候大致看過,也寫在了學習教程裏

“非正式協議概念其實就是類別的另一種表達方式“這裏有一些你可能希望實現的方法,你可以使用他們更好的完成工作”。

這個意思是,這些是可選的。比如我門要一個更好的方法,我們就會申明一個這樣的類別去實現。然後你在後期可以直接使用這些更好的方法。

這麼看,總覺得類別這玩意兒有點像協議的可選協議。"

現在來看,其實protocal已經開始對兩者都統一和規範起來操作,因爲資料中說“非正式協議使用interface修飾“,

現在我們看到協議中兩個修飾詞:“必須實現(@requied)”和“可選實現(@optional)”。

OC中的協議(formal protocol)與java中的接口概念基本一致,OC中非正式協議(informal protocol)就是類別。在java中如果繼承了接口,但不實現其方法,會得到一個error(無法編譯);在OC中的正式協議,如果不實現,會得到一個warning(可編譯執行),如果想去除waring,還可以加關鍵字(@optional),讓它可選實現方法。

are KVO and KVC?

答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標識屬性,而不是通過調用存取方法,直接或通過實例變量訪問的機制。

很多情況下可以簡化程序代碼。apple文檔其實給了一個很好的例子。

kvo:鍵值觀察機制,他提供了觀察某一屬性變化的方法,極大的簡化了代碼。

具體用看到嗯哼用到過的一個地方是對於按鈕點擊變化狀態的的監控。

比如我自定義的一個button

[cpp]

[self addObserver:self forKeyPath:@"highlighted" options:0 context:nil];

#pragma mark KVO

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"highlighted"] ) {

[self setNeedsDisplay];

}

}

對於系統是根據keypath去取的到相應的'值發生改變,理論上來說是和kvc機制的道理是一樣的。

對於kvc機制如何通過key尋找到value:

“當通過KVC調用對象時,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過幾種不同的方式解析這個調用。首先查找對象是否帶有 someKey 這個方法,如果沒找到,會繼續查找對象是否帶有someKey這個實例變量(iVar),如果還沒有找到,程序會繼續試圖調用 -(id) valueForUndefinedKey:這個方法。如果這個方法還是沒有被實現的話,程序會拋出一個NSUndefinedKeyException異常錯誤。

(注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法,還會查找getsomeKey這個方法,前面加一個get,或者_someKey以及_getsomeKey這幾種形式。同時,查找實例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在。)

設計valueForUndefinedKey:方法的主要目的是當你使用-(id)valueForKey方法從對象中請求值時,對象能夠在錯誤發生前,有最後的機會響應這個請求。這樣做有很多好處,下面的兩個例子說明了這樣做的好處。“

來至cocoa,這個說法應該挺有道理。

因爲我們知道button卻是存在一個highlighted實例變量.因此爲何上面我們只是add一個相關的keypath就行了,

可以按照kvc查找的邏輯理解,就說的過去了。

is purpose of delegates?

代理的作用?

答案:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架複雜度。

另外一點,代理可以理解爲java中的回調監聽機制的一種類似。

are mutable and immutable types in Objective C?

oc中可修改和不可以修改類型。

答案:可修改不可修改的集合類。這個我個人簡單理解就是可動態添加修改和不可動態添加修改一樣。

比如NSArray和NSMutableArray。前者在初始化後的內存控件就是固定不可變的,後者可以添加等,可以動態申請新的內存空間。

we call objective c is runtime language what does it mean?

我們說的oc是動態運行時語言是什麼意思?

答案:多態。 主要是將數據類型的確定由編譯時,推遲到了運行時。

這個問題其實淺涉及到兩個概念,運行時和多態。

簡單來說,運行時機制使我們直到運行時纔去決定一個對象的類別,以及調用該類別對象指定方法。

多態:不同對象以自己的方式響應相同的消息的能力叫做多態。意思就是假設生物類(life)都用有一個相同的方法-eat;

那人類屬於生物,豬也屬於生物,都繼承了life後,實現各自的eat,但是調用是我們只需調用各自的eat方法。

也就是不同的對象以自己的方式響應了相同的消息(響應了eat這個選擇器)。

因此也可以說,運行時機制是多態的基礎?~~~

is difference between NSNotification and protocol?

通知和協議的不同之處?

答案:協議有控制鏈(has-a)的關係,通知沒有。

首先我一開始也不太明白,什麼叫控制鏈(專業術語了~)。但是簡單分析下通知和代理的行爲模式,我們大致可以有自己的理解

簡單來說,通知的話,它可以一對多,一條消息可以發送給多個消息接受者。

代理按我們的理解,到不是直接說不能一對多,比如我們知道的明星經濟代理人,很多時候一個經濟人負責好幾個明星的事務。

只是對於不同明星間,代理的事物對象都是不一樣的,一一對應,不可能說明天要處理A明星要一個發佈會,代理人發出處理髮佈會的消息後,別稱B的

發佈會了。但是通知就不一樣,他只關心發出通知,而不關心多少接收到感興趣要處理。

因此控制鏈(has-a從英語單詞大致可以看出,單一擁有和可控制的對應關係。