版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、iOS 面試題錦集1.Difference between shallow copy and deep copy?淺復(fù)制和深復(fù)制的區(qū)別答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔?,而不?fù)制引用對(duì)象本身。深層復(fù)制:復(fù)制引用對(duì)象本身。意思就是說(shuō)我有個(gè)A對(duì)象,復(fù)制一份后得到A_copy對(duì)象后,對(duì)于淺復(fù)制來(lái)說(shuō),A和A_copy指向的是同一個(gè)內(nèi)存資源,復(fù)制的只不過(guò)是是一個(gè)指針,對(duì)象本身資源還是只有一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對(duì)象本身。用網(wǎng)上一哥們通俗的話將就是:淺復(fù)制好比你和你的影子,你完
2、蛋,你的影子也完蛋深復(fù)制好比你和你的克隆人,你完蛋,你的克隆人還活著。2.What is advantage of categories What is difference between implementing a category and inheritance類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別答案:category 可以在不獲悉,不改變?cè)瓉?lái)代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。并且如果類別和原來(lái)類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來(lái)的方法,因?yàn)轭悇e具有更高的優(yōu)先級(jí)。類別主要有3個(gè)作用:(1)將類的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中。(2)創(chuàng)建對(duì)私有方法的前
3、向引用。(3)向?qū)ο筇砑臃钦絽f(xié)議。繼承可以增加,修改或者刪除方法,并且可以增加屬性。3.Difference between categories and extensions?類別和類擴(kuò)展的區(qū)別。答案:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實(shí)現(xiàn)的。extensions可以認(rèn)為是一個(gè)私有的Category。4.Difference between protocol in objective c and interfaces in java?obc中的協(xié)議和java中的接口概念有何不同?答案:OBC中的代理有2層含義,官方定義為 form
4、al和informal protocol。前者和Java接口一樣。informal protocol中的方法屬于設(shè)計(jì)模式考慮范疇,不是必須實(shí)現(xiàn)的,但是如果有實(shí)現(xiàn),就會(huì)改變類的屬性。其實(shí)關(guān)于正式協(xié)議,類別和非正式協(xié)議我很早前學(xué)習(xí)的時(shí)候大致看過(guò),也寫在了學(xué)習(xí)教程里“非正式協(xié)議概念其實(shí)就是類別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法,你可以使用他們更好的完成工作”。這個(gè)意思是,這些是可選的。比如我門要一個(gè)更好的方法,我們就會(huì)申明一個(gè)這樣的類別去實(shí)現(xiàn)。然后你在后期可以直接使用這些更好的方法。這么看,總覺(jué)得類別這玩意兒有點(diǎn)像協(xié)議的可選協(xié)議?,F(xiàn)在來(lái)看,其實(shí)protocal已經(jīng)開(kāi)始對(duì)兩者都統(tǒng)一和規(guī)范
5、起來(lái)操作,因?yàn)橘Y料中說(shuō)“非正式協(xié)議使用interface修飾“,現(xiàn)在我們看到協(xié)議中兩個(gè)修飾詞:“必須實(shí)現(xiàn)(requied)”和“可選實(shí)現(xiàn)(optional)”。5.What are KVO and KVC?答案:kvc:鍵 - 值編碼是一種間接訪問(wèn)對(duì)象的屬性使用字符串來(lái)標(biāo)識(shí)屬性,而不是通過(guò)調(diào)用存取方法,直接或通過(guò)實(shí)例變量訪問(wèn)的機(jī)制。很多情況下可以簡(jiǎn)化程序代碼。apple文檔其實(shí)給了一個(gè)很好的例子。kvo:鍵值觀察機(jī)制,他提供了觀察某一屬性變化的方法,極大的簡(jiǎn)化了代碼。具體用看到嗯哼用到過(guò)的一個(gè)地方是對(duì)于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控。比如我自定義的一個(gè)buttoncppself addObserve
6、r: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; 對(duì)于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來(lái)說(shuō)是和kvc機(jī)制的道理是
7、一樣的。對(duì)于kvc機(jī)制如何通過(guò)key尋找到value:“當(dāng)通過(guò)KVC調(diào)用對(duì)象時(shí),比如:self valueForKey:”someKey”時(shí),程序會(huì)自動(dòng)試圖通過(guò)幾種不同的方式解析這個(gè)調(diào)用。首先查找對(duì)象是否帶有 someKey 這個(gè)方法,如果沒(méi)找到,會(huì)繼續(xù)查找對(duì)象是否帶有someKey這個(gè)實(shí)例變量(iVar),如果還沒(méi)有找到,程序會(huì)繼續(xù)試圖調(diào)用 -(id) valueForUndefinedKey:這個(gè)方法。如果這個(gè)方法還是沒(méi)有被實(shí)現(xiàn)的話,程序會(huì)拋出一個(gè)NSUndefinedKeyException異常錯(cuò)誤。(注:Key-Value Coding查找方法的時(shí)候,不僅僅會(huì)查找someKey這個(gè)方法
8、,還會(huì)查找getsomeKey這個(gè)方法,前面加一個(gè)get,或者_(dá)someKey以及_getsomeKey這幾種形式。同時(shí),查找實(shí)例變量的時(shí)候也會(huì)不僅僅查找someKey這個(gè)變量,也會(huì)查找_someKey這個(gè)變量是否存在。)設(shè)計(jì)valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey方法從對(duì)象中請(qǐng)求值時(shí),對(duì)象能夠在錯(cuò)誤發(fā)生前,有最后的機(jī)會(huì)響應(yīng)這個(gè)請(qǐng)求。這樣做有很多好處,下面的兩個(gè)例子說(shuō)明了這樣做的好處?!皝?lái)至cocoa,這個(gè)說(shuō)法應(yīng)該挺有道理。因?yàn)槲覀冎纀utton卻是存在一個(gè)highlighted實(shí)例變量.因此為何上面我們只是add一個(gè)相關(guān)的keypa
9、th就行了,可以按照kvc查找的邏輯理解,就說(shuō)的過(guò)去了。6.What is purpose of delegates代理的作用答案:代理的目的是改變或傳遞控制鏈。允許一個(gè)類在某些特定時(shí)刻通知到其他類,而不需要獲取到那些類的指針??梢詼p少框架復(fù)雜度。另外一點(diǎn),代理可以理解為java中的回調(diào)監(jiān)聽(tīng)機(jī)制的一種類似。7.What are mutable and immutable types in Objective C?obc中可修改和不可以修改類型。答案:可修改不可修改的集合類。這個(gè)我個(gè)人簡(jiǎn)單理解就是可動(dòng)態(tài)添加修改和不可動(dòng)態(tài)添加修改一樣。比如NSArray和NSMutableArray。前者在初始化
10、后的內(nèi)存控件就是固定不可變的,后者可以添加等,可以動(dòng)態(tài)申請(qǐng)新的內(nèi)存空間。8.When we call objective c is runtime language what does it mean?我們說(shuō)的obc是動(dòng)態(tài)運(yùn)行時(shí)語(yǔ)言是什么意思?答案:多態(tài)。 主要是將數(shù)據(jù)類型的確定由編譯時(shí),推遲到了運(yùn)行時(shí)。這個(gè)問(wèn)題其實(shí)淺涉及到兩個(gè)概念,運(yùn)行時(shí)和多態(tài)。簡(jiǎn)單來(lái)說(shuō),運(yùn)行時(shí)機(jī)制使我們直到運(yùn)行時(shí)才去決定一個(gè)對(duì)象的類別,以及調(diào)用該類別對(duì)象指定方法。多態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(life)都用有一個(gè)相同的方法-eat;那人類屬于生物,豬也屬于生物,都繼承了life
11、后,實(shí)現(xiàn)各自的eat,但是調(diào)用是我們只需調(diào)用各自的eat方法。也就是不同的對(duì)象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個(gè)選擇器)。因此也可以說(shuō),運(yùn)行時(shí)機(jī)制是多態(tài)的基礎(chǔ)9.what is difference between NSNotification and protocol?通知和協(xié)議的不同之處答案:協(xié)議有控制鏈(has-a)的關(guān)系,通知沒(méi)有。首先我一開(kāi)始也不太明白,什么叫控制鏈(專業(yè)術(shù)語(yǔ)了)。但是簡(jiǎn)單分析下通知和代理的行為模式,我們大致可以有自己的理解簡(jiǎn)單來(lái)說(shuō),通知的話,它可以一對(duì)多,一條消息可以發(fā)送給多個(gè)消息接受者。代理按我們的理解,到不是直接說(shuō)不能一對(duì)多,比如我們知道的明星經(jīng)濟(jì)代
12、理人,很多時(shí)候一個(gè)經(jīng)濟(jì)人負(fù)責(zé)好幾個(gè)明星的事務(wù)。只是對(duì)于不同明星間,代理的事物對(duì)象都是不一樣的,一一對(duì)應(yīng),不可能說(shuō)明天要處理A明星要一個(gè)發(fā)布會(huì),代理人發(fā)出處理發(fā)布會(huì)的消息后,別稱B的發(fā)布會(huì)了。但是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理。因此控制鏈(has-a從英語(yǔ)單詞大致可以看出,單一擁有和可控制的對(duì)應(yīng)關(guān)系。10.What is push notification什么是推送消息11.Polymorphism?關(guān)于多態(tài)性答案:多態(tài),子類指針可以賦值給父類。這個(gè)題目其實(shí)可以出到一切面向?qū)ο笳Z(yǔ)言中,因此關(guān)于多態(tài),繼承和封裝基本最好都有個(gè)自我意識(shí)的理解,也并非一定要把書上資料上寫
13、的能背出來(lái)。最重要的是轉(zhuǎn)化成自我理解。12.Singleton?對(duì)于單例的理解答案:11,12題目其實(shí)出的有點(diǎn)泛泛的感覺(jué)了,可能說(shuō)是編程語(yǔ)言需要或是必備的基礎(chǔ)?;灸苡檬煜さ恼Z(yǔ)言寫出一個(gè)單例,以及可以運(yùn)用到的場(chǎng)景或是你編程中碰到過(guò)運(yùn)用的此種模式的框架類等。進(jìn)一步點(diǎn),考慮下如何在多線程訪問(wèn)單例時(shí)的安全性。13.What is responder chain?說(shuō)說(shuō)響應(yīng)鏈答案: 事件響應(yīng)鏈。包括點(diǎn)擊事件,畫面刷新事件等。在視圖棧內(nèi)從上至下,或者從下之上傳播。可以說(shuō)點(diǎn)事件的分發(fā),傳遞以及處理。具體可以去看下touch事件這塊。因?yàn)閱?wèn)的太抽象化了嚴(yán)重懷疑題目出到越后面就越籠統(tǒng)。14.Difference
14、 between frame and boundsframe和bounds有什么不同答案:frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))15.Difference between method and selector方法和選擇器有何不同答案:selector是一個(gè)方法的名字,method是一個(gè)組合體,包含了名字和實(shí)現(xiàn).詳情可以看apple文檔。16.Is there any garbage collection mechanism in Objective C.O
15、BC的垃圾回收機(jī)制?答案: OBC2.0有Garbage collection,但是iOS平臺(tái)不提供。一般我們了解的objective-c對(duì)于內(nèi)存管理都是手動(dòng)操作的,但是也有自動(dòng)釋放池。但是差了大部分資料,貌似不要和arc機(jī)制搞混就好了。求更多17.NSOperation queue?答案:存放NSOperation的集合類。操作和操作隊(duì)列,基本可以看成java中的線程和線程池的概念。用于處理ios多線程開(kāi)發(fā)的問(wèn)題。網(wǎng)上部分資料提到一點(diǎn)是,雖然是queue,但是卻并不是帶有隊(duì)列的概念,放入的操作并非是按照嚴(yán)格的先進(jìn)現(xiàn)出。這邊又有個(gè)疑點(diǎn)是,對(duì)于隊(duì)列來(lái)說(shuō),先進(jìn)先出的概念是Afunc添加進(jìn)隊(duì)列,Bf
16、unc緊跟著也進(jìn)入隊(duì)列,Afunc先執(zhí)行這個(gè)是必然的,但是Bfunc是等Afunc完全操作完以后,B才開(kāi)始啟動(dòng)并且執(zhí)行,因此隊(duì)列的概念離亂上有點(diǎn)違背了多線程處理這個(gè)概念。但是轉(zhuǎn)念一想其實(shí)可以參考銀行的取票和叫號(hào)系統(tǒng)。因此對(duì)于A比B先排隊(duì)取票但是B率先執(zhí)行完操作,我們亦然可以感性認(rèn)為這還是一個(gè)隊(duì)列。但是后來(lái)看到一票關(guān)于這操作隊(duì)列話題的文章,其中有一句提到“因?yàn)閮蓚€(gè)操作提交的時(shí)間間隔很近,線程池中的線程,誰(shuí)先啟動(dòng)是不定的。”瞬間覺(jué)得這個(gè)queue名字有點(diǎn)忽悠人了,還不如pool綜合一點(diǎn),我們知道他可以比較大的用處在于可以幫組多線程編程就好了。18.What is lazy loading?答案:懶
17、漢模式,只在用到的時(shí)候才去初始化。也可以理解成延時(shí)加載。我覺(jué)得最好也最簡(jiǎn)單的一個(gè)列子就是tableView中圖片的加載顯示了。一個(gè)延時(shí)載,避免內(nèi)存過(guò)高,一個(gè)異步加載,避免線程堵塞。19.Can we use two tableview controllers on one viewcontroller是否在一個(gè)視圖控制器中嵌入兩個(gè)tableview控制器答案:一個(gè)視圖控制只提供了一個(gè)View視圖,理論上一個(gè)tableViewController也不能放吧,只能說(shuō)可以嵌入一個(gè)tableview視圖。當(dāng)然,題目本身也有歧義,如果不是我們定性思維認(rèn)為的UIViewController,而是宏觀的表示
18、視圖控制者,那我們倒是可以把其看成一個(gè)視圖控制者,它可以控制多個(gè)視圖控制器,比如TabbarController那樣的感覺(jué)。20.Can we use one tableview with two different datasources How you will achieve this一個(gè)tableView是否可以關(guān)聯(lián)兩個(gè)不同的數(shù)據(jù)源你會(huì)怎么處理答案:首先我們從代碼來(lái)看,數(shù)據(jù)源如何關(guān)聯(lián)上的,其實(shí)是在數(shù)據(jù)源關(guān)聯(lián)的代理方法里實(shí)現(xiàn)的。因此我們并不關(guān)心如何去關(guān)聯(lián)他,他怎么關(guān)聯(lián)上,方法只是讓我返回根據(jù)自己的需要去設(shè)置如相關(guān)的數(shù)據(jù)源。因此,我覺(jué)得可以設(shè)置多個(gè)數(shù)據(jù)源啊,但是有個(gè)問(wèn)題是,你這是想干嘛呢想
19、讓列表如何顯示,不同的數(shù)據(jù)源分區(qū)塊顯示21.Objectc的類可以多重繼承么可以實(shí)現(xiàn)多個(gè)接口么重寫一個(gè)類的方式用繼承好還是分類好為什么Objective-c只支持單繼承,如果要實(shí)現(xiàn)多繼承的話,可以通過(guò)類別和協(xié)議的方式來(lái)實(shí)現(xiàn),cocoa 中所有的類都是NSObject 的子類,多繼承在這里是用protocol 委托代理 來(lái)實(shí)現(xiàn)的。22.#import 跟#include 又什么區(qū)別 import 跟 #import又什么區(qū)別?答案:class一般用于頭文件中需要聲明該類的某個(gè)實(shí)例變量的時(shí)候用到,在m文 件中還是需要使用#import而#import比起#include的好處就是不會(huì)引起交叉編譯。
20、以下沒(méi)標(biāo)準(zhǔn)答案23.類變量的protected ,private,public,package聲明各有什么含義()24.id 聲明的對(duì)象有什么特性?答案:id是個(gè)很重要的類型,是個(gè)可以指向任何類型的指針或者可以理解為指向任何未知類型的指針。25.MVC是什么有什么特性為什么在iPhone上被廣泛運(yùn)用?答案:MVC設(shè)計(jì)模式考慮三種對(duì)象:模型對(duì)象、視圖對(duì)象、和控制器對(duì)象。模型對(duì)象代表 特別的知識(shí)和專業(yè)技能,它們負(fù)責(zé)保有應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯。視圖對(duì)象知道如何顯示應(yīng)用程序的模型數(shù)據(jù),而且可能允許用戶對(duì)其進(jìn)行編輯??刂?器對(duì)象是應(yīng)用程序的視圖對(duì)象和模型對(duì)象之間的協(xié)調(diào)者。26.對(duì)于語(yǔ)句NSS
21、tring* testObject = NSData alloc init;testObject 在編譯時(shí)和運(yùn)行時(shí)分別是什么類型的對(duì)象?27.什么是安全釋放?28.為什么有些4.0獨(dú)有的objectivec 函數(shù)在3.1上運(yùn)行時(shí)會(huì)報(bào)錯(cuò).而4.0獨(dú)有的類在3.1上分配內(nèi)存時(shí)不會(huì)報(bào)錯(cuò)分配的結(jié)果是什么29.為什么4.0獨(dú)有的c函數(shù)在3.1的機(jī)器上運(yùn)行不會(huì)報(bào)錯(cuò)(在沒(méi)有調(diào)用的情況下)而4.0獨(dú)有的類名在3.1的機(jī)器上一運(yùn)行就報(bào)錯(cuò)30.異常exception 怎么捕獲不同的CPU結(jié)構(gòu)上開(kāi)銷怎樣C中又什么類似的方法?31.property中屬性retain,copy,assgin的含義分別是什么?有什么區(qū)別
22、將其轉(zhuǎn)換成getset方法怎么做?有什么注意事項(xiàng)32.委托是什么委托的property聲明用什么屬性為什么?33.淺拷貝和深拷貝區(qū)別是什么.34.Cocoa中有虛基類的概念么?怎么簡(jiǎn)潔的實(shí)現(xiàn)35.自動(dòng)釋放池跟GC(垃圾回收)有什么區(qū)別iPhone上有GC么pool release 和pool drain有什么區(qū)別iPhone上沒(méi)有GC。iPhone開(kāi)發(fā)的時(shí)候沒(méi)有垃圾回收機(jī)制。在垃圾回收環(huán)境中,release是一個(gè)空操作。因此,NSAutoreleasePool提供了drain方法,在引用計(jì)數(shù)環(huán)境中,該方法的作用等同于調(diào)用release,但在垃圾回收環(huán)境中,它會(huì)觸發(fā)垃圾回收(如果自上次垃圾回收以
23、來(lái)分配的內(nèi)存大于當(dāng)前的閾值)。因此,在通常情況下,您應(yīng)該使用drain而不是release來(lái)銷毀自動(dòng)釋放池。36.for(int index = 0; index Bonjour WebKit BSD Sockets 用戶應(yīng)用 Address Book Core Location Map Kit Store Kit62. objc的內(nèi)存管理如果您通過(guò)分配和初始化(比如MyClass alloc init)的方式來(lái)創(chuàng)建對(duì)象,您就擁有這個(gè)對(duì)象,需要負(fù)責(zé)該對(duì)象的釋放。這個(gè)規(guī)則在使用NSObject的便利方法new 時(shí)也同樣適用.如果您拷貝一個(gè)對(duì)象,您也擁有拷貝得到的對(duì)象,需要負(fù)責(zé)該對(duì)象的釋放.如果您
24、保持一個(gè)對(duì)象,您就部分擁有這個(gè)對(duì)象,需要在不再使用時(shí)釋放該對(duì)象。如果您從其它對(duì)象那里接收到一個(gè)對(duì)象,則您不擁有該對(duì)象,也不應(yīng)該釋放它(這個(gè)規(guī)則有少數(shù)的例外,在參考文檔中有顯式的說(shuō)明)。63. 自動(dòng)釋放池是什么,如何工作當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì) 象的一個(gè)引用放入到最新的自動(dòng)釋放池。它仍然是個(gè)正當(dāng)?shù)膶?duì)象,因此自動(dòng)釋放池定義的作用域內(nèi)的其它對(duì)象可以向它發(fā)送消息。當(dāng)程序執(zhí)行到作用域結(jié)束的位置 時(shí),自動(dòng)釋放池就會(huì)被釋放,池中的所有對(duì)象也就被釋放。1. ojc-c 是通過(guò)一種referring counting(引用計(jì)數(shù))的方式來(lái)管理內(nèi)存的, 對(duì)象在開(kāi)始分配
25、內(nèi)存(alloc)的時(shí)候引用計(jì)數(shù)為一,以后每當(dāng)碰到有copy,retain的時(shí)候引用計(jì)數(shù)都會(huì)加一, 每當(dāng)碰到release和autorelease的時(shí)候引用計(jì)數(shù)就會(huì)減一,如果此對(duì)象的計(jì)數(shù)變?yōu)榱?, 就會(huì)被系統(tǒng)銷毀.2. NSAutoreleasePool 就是用來(lái)做引用計(jì)數(shù)的管理工作的,這個(gè)東西一般不用你管的.3. autorelease和release沒(méi)什么區(qū)別,只是引用計(jì)數(shù)減一的時(shí)機(jī)不同而已,autorelease會(huì)在對(duì)象的使用真正結(jié)束的時(shí)候才做引用計(jì)數(shù) 減一.64. 類工廠方法是什么類工廠方法的實(shí)現(xiàn)是為了向客戶提供方便,它們將分配和初始化合在一個(gè)步驟中, 返回被創(chuàng)建的對(duì)象,并進(jìn)行自動(dòng)釋放
26、處理。這些方法的形式是+ (type)className.(其中 className不包括任何前綴)。工廠方法可能不僅僅為了方便使用。它們不但可以將分配和初始化合在一起,還可以 為初始化過(guò)程提供對(duì)象的分配信息。類工廠方法的另一個(gè)目的是使類(比如NSWorkspace)提供單件實(shí)例。雖 然init.方法可以確認(rèn)一個(gè)類在每次程序運(yùn)行過(guò)程只存在一個(gè)實(shí)例,但它需要首先分配一個(gè)“生的”實(shí)例,然后還必須釋放該實(shí)例。工廠 方法則可以避免為可能沒(méi)有用的對(duì)象盲目分配內(nèi)存。65. 單件實(shí)例是什么Foundation 和 Application Kit 框架中的一些類只允許創(chuàng)建單件對(duì)象,即這些類在當(dāng)前進(jìn)程中的唯一實(shí)
27、例。舉例來(lái)說(shuō),NSFileManager 和NSWorkspace 類在使用時(shí)都是基于進(jìn)程進(jìn)行單件對(duì)象的實(shí)例化。當(dāng)向這些類請(qǐng)求實(shí)例的時(shí)候,它們會(huì)向您傳遞單一實(shí)例的一個(gè)引用,如果該實(shí)例還不存在,則首先進(jìn)行實(shí)例的分配 和初始化。 單件對(duì)象充當(dāng)控制中心的角色,負(fù)責(zé)指引或協(xié)調(diào)類的各種服務(wù)。如果類在概念上只有一個(gè)實(shí)例(比如NSWorkspace),就應(yīng)該產(chǎn)生 一個(gè)單件實(shí)例,而不是多個(gè)實(shí)例;如果將來(lái)某一天可能有多個(gè)實(shí)例,您可以使用單件實(shí)例機(jī)制,而不是工廠方法或函數(shù)。66. 動(dòng)態(tài)綁定在運(yùn)行時(shí)確定要調(diào)用的方法動(dòng)態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時(shí)。在編譯時(shí),方法的調(diào)用并不和代碼綁定 在一起,只有在消實(shí)發(fā)送出來(lái)
28、之后,才確定被調(diào)用的代碼。通過(guò)動(dòng)態(tài)類型和動(dòng)態(tài)綁定技術(shù),您的代碼每次執(zhí)行都可以得到不同的結(jié)果。運(yùn)行時(shí)因子負(fù)責(zé)確定消息的接 收者和被調(diào)用的方法。 運(yùn)行時(shí)的消息分發(fā)機(jī)制為動(dòng)態(tài)綁定提供支持。當(dāng)您向一個(gè)動(dòng)態(tài)類型確定了的對(duì)象發(fā)送消息時(shí),運(yùn)行環(huán)境系統(tǒng)會(huì)通過(guò)接收者的isa指針定位對(duì)象的類,并以此為起點(diǎn) 確定被調(diào)用的方法,方法和消息是動(dòng)態(tài)綁定的。而且,您不必在Objective-C 代碼中做任何工作,就可以自動(dòng)獲取動(dòng)態(tài)綁定的好處。您在每次發(fā)送消息時(shí),特別是當(dāng)消息的接收者是動(dòng)態(tài)類型已經(jīng)確定的對(duì)象時(shí),動(dòng)態(tài)綁定就會(huì)例行而 透明地發(fā)生。67. obj-c的優(yōu)缺點(diǎn)objc優(yōu)點(diǎn):1) Cateogies2) Posing3
29、) 動(dòng)態(tài)識(shí)別4) 指標(biāo)計(jì)算5)彈性訊息傳遞6) 不是一個(gè)過(guò)度復(fù)雜的 C 衍生語(yǔ)言7) Objective-C 與 C+ 可混合編程缺點(diǎn): 1)不支援命名空間 2)不支持運(yùn)算符重載 3) 不支持多重繼承4) 使用動(dòng)態(tài)運(yùn)行時(shí)類型,所有的方法都是函數(shù)調(diào)用,所以很多編譯時(shí)優(yōu)化方法都用不到。(如內(nèi)聯(lián)函數(shù)等),性能低劣。68. readwrite,readonly,assign,retain,copy,nonatomic 屬性的作用property是 一個(gè)屬性訪問(wèn)聲明,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:1,getter=getterName,setter=setterName,設(shè)置setter與 getter的方法
30、名2,readwrite,readonly,設(shè)置可供訪問(wèn)級(jí)別2,assign,setter方法直接賦值,不進(jìn)行 任何retain操作,為了解決原類型與環(huán)循引用問(wèn)題3,retain,setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值,所有 實(shí)現(xiàn)都是這個(gè)順序(CC上有相關(guān)資料)4,copy,setter方法進(jìn)行Copy操作,與retain處理流程一樣,先舊值release,再 Copy出新的對(duì)象,retainCount為1。這是為了減少對(duì)上下文的依賴而引入的機(jī)制。5,nonatomic,非原子性訪問(wèn),不加同步, 多線程并發(fā)訪問(wèn)會(huì)提高性能。注意,如果不加此屬性,則默認(rèn)是兩個(gè)訪問(wèn)方法都為原
31、子型事務(wù)訪問(wèn)。鎖被加到所屬對(duì)象實(shí)例級(jí)(我是這么理解的.)。69. ViewController 的 didReceiveMemoryWarning 是在什么時(shí)候被調(diào)用的?(87題)70. 談?wù)勀銓?duì)ARC 的認(rèn)識(shí)和理解?71. ObjC中,與alloc語(yǔ)義相反的方法是dealloc還是release與retain語(yǔ)義相反的方法是dealloc還是release,為什么?需要與alloc配對(duì)使用的方法是dealloc還是release,為什么?alloc與dealloc語(yǔ)意相反,alloc是創(chuàng)建變量,dealloc是釋放變量。 retain 對(duì)應(yīng)release,retain 保留一個(gè)對(duì)象。調(diào)用之后
32、,變量的計(jì)數(shù)加1。或許不是很明顯,在這有例為證: - (void) setName : (NSString*) name name retain; myname release; myname = name; 我們來(lái)解釋一下:設(shè)想,用戶在調(diào)用這個(gè)函數(shù)的時(shí)候,他注意了內(nèi)存的管理,所以他小心的寫了如下代碼: NSString * newname = NSString alloc initWithString: John; aClass setName: newname; newname release; 我們來(lái)看一看newname的計(jì)數(shù)是怎么變化的。首先,它被alloc,count = 1; 然后
33、,在setName中,它被retain, count = 2; 最后,用戶自己釋放newname,count = 1,myname指向了newname。這也解釋了為什么需要調(diào)用myname release。我們需要在給myname賦新值的時(shí)候,釋放掉以前老的變量。retain 之后直接dealloc對(duì)象計(jì)數(shù)器沒(méi)有釋放。alloc 需要與release配對(duì)使用,因?yàn)閍lloc 這個(gè)函數(shù)調(diào)用之后,變量的計(jì)數(shù)加1。所以在調(diào)用alloc 之后,一定要調(diào)用對(duì)應(yīng)的release。另外,在release一個(gè)變量之后,他的值仍然有效,所以最好是后面緊接著再var = nil。72. 在一個(gè)對(duì)象的方法里面:se
34、 = “object”;和name ”object”有什么不同 73. 這段代碼有什么問(wèn)題:implementation Person- (void)setAge:(int)newAge self.age = newAge;end 74. 什么是retain count? 75. 以下每行代碼執(zhí)行后,person對(duì)象的retain count分別是多少Person *person = Person alloc init;person retain;person release;person release;76. 為什么很多內(nèi)置類如UITableViewController的de
35、legate屬性都是assign而不是retain的?77. 定義屬性時(shí),什么情況使用copy,assign,和retainassign用于簡(jiǎn)單數(shù)據(jù)類型,如NSInteger,double,bool,retain 和copy用戶對(duì)象,copy用于當(dāng) a指向一個(gè)對(duì)象,b也想指向同樣的對(duì)象的時(shí)候,如果用assign,a如果釋放,再調(diào)用b會(huì)crash,如果用copy 的方式,a和b各自有自己的內(nèi)存,就可以解決這個(gè)問(wèn)題。retain 會(huì)使計(jì)數(shù)器加一,也可以解決assign的問(wèn)題。另外:atomic和nonatomic用來(lái)決定編譯器生成的getter和setter是否為原子操作。在多線程環(huán)境下,原子操作
36、是必要的,否則有可能引起錯(cuò)誤的結(jié)果。加了atomic,setter函數(shù)會(huì)變成下面這樣: if (property != newValue) property release; property = newValue retain; 78. autorelease的對(duì)象是在什么時(shí)候被release的?答:autorelease實(shí)際上只是把對(duì)release的調(diào)用延遲了,對(duì)于每一個(gè)Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的Autorelease pool中,當(dāng)該pool被釋放時(shí),該pool中的所有Object會(huì)被調(diào)用Release。對(duì)于每一個(gè)Runloop, 系統(tǒng)會(huì)隱式創(chuàng)建一個(gè)Au
37、torelease pool,這樣所有的release pool會(huì)構(gòu)成一個(gè)象CallStack一樣的一個(gè)棧式結(jié)構(gòu),在每一個(gè)Runloop結(jié)束時(shí),當(dāng)前棧頂?shù)腁utorelease pool會(huì)被銷毀,這樣這個(gè)pool里的每個(gè)Object(就是autorelease的對(duì)象)會(huì)被release。那什么是一個(gè)Runloop呢 一個(gè)UI事件,Timer call, delegate call, 都會(huì)是一個(gè)新的Runloop。那什么是一個(gè)Runloop呢 一個(gè)UI事件,Timer call, delegate call, 都會(huì)是一個(gè)新的Runloop。79. 這段代碼有什么問(wèn)題,如何修改for (int i
38、 = 0; i someLargeNumber; i+)NSString *string = ”Abc”;string = string lowercaseString;string = string stringByAppendingString:xyz;NSLog(“%”, string);80. autorelease和垃圾回收機(jī)制(gc)有什么關(guān)系?IPhone OS有沒(méi)有垃圾回收(gc)81. Objective C中的protocal是什么?protocal obj里面的協(xié)議就如同java里面的interface。82. Objective C中的selector 是什么?你可以理
39、解 selector()就是取類方法的編號(hào),他的行為基本可以等同C語(yǔ)言的中函數(shù)指針,只不過(guò)C語(yǔ)言中,可以把函數(shù)名直接賦給一個(gè)函數(shù)指針,而Objective-C的類不能直接應(yīng)用函數(shù)指針,這樣只能做一個(gè)selector語(yǔ)法來(lái)取. 它的結(jié)果是一個(gè)SEL類型。這個(gè)類型本質(zhì)是類方法的編號(hào)(函數(shù)地址)。83. Objective C中的category是什么Objective-C提供了一個(gè)非常靈活的類(Class)擴(kuò)展機(jī)制類別(Category)。類別用于對(duì)一個(gè)已經(jīng)存在的類添加方法(Methods)。你只需要知道這個(gè)類的公開(kāi)接口,不需要知道類的源代碼。需要注意的是,類別不能為已存在的類添加實(shí)例變量(Instance Variables)。子類(subclassing)是進(jìn)行類
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全生產(chǎn)工作計(jì)劃
- 2025年度森林防火安全生產(chǎn)責(zé)任制及監(jiān)控合同3篇
- 2025餐飲業(yè)三人合作項(xiàng)目風(fēng)險(xiǎn)承擔(dān)合同3篇
- 2024智慧城市公共交通優(yōu)化合同
- 2024年適用無(wú)息貸款協(xié)議規(guī)范格式版
- 2025年度智能節(jié)能彩板房定制安裝服務(wù)協(xié)議3篇
- 2024通信基礎(chǔ)設(shè)施建設(shè)與運(yùn)營(yíng)管理服務(wù)合同3篇
- 2024某大型水利樞紐建設(shè)與運(yùn)營(yíng)合同
- 2024隨車吊設(shè)備租賃與操作培訓(xùn)合同3篇
- 2025餐飲店鋪食品安全責(zé)任承諾書范本3篇
- 中央空調(diào)工程售后服務(wù)的方案
- 宜賓五糧液股份有限公司招聘考試試卷及答案
- 2024CSCO胰腺癌診療指南解讀
- 2023年浙江省溫州市中考數(shù)學(xué)真題含解析
- 電力安全工作規(guī)程考試試題(答案)
- 司庫(kù)體系建設(shè)
- 城市燃?xì)夤芫W(wǎng)改造合同
- 居間合同范本解
- 港口物流協(xié)同優(yōu)化算法設(shè)計(jì)
- 2024北京市公安局平谷分局勤務(wù)輔警人員招聘筆試參考題庫(kù)含答案解析
- 單位信息化建設(shè)IT建設(shè)項(xiàng)目后評(píng)估報(bào)告(模板)
評(píng)論
0/150
提交評(píng)論