C/C++/OC 問答整理 摘自網(wǎng)絡(luò)

http://download.csdn.net/detail/weasleyqi/4733438悠菜,本人知識淺薄愚隧,有些問題暫時還未得到解決,高手看到請留下您寶貴的答案??由于內(nèi)容較多枉昏,所以分兩篇來發(fā)表晒奕,這是第一篇:

1.Difference between shallow copy and deep copy?淺復(fù)制和深復(fù)制的區(qū)別绪氛?

答案:淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔標艏Γ粡?fù)制引用對象本身。深層復(fù)制:復(fù)制引用對象本身枣察。意思就是說我有個A對象争占,復(fù)制一份后得到A_copy對象后,對于淺復(fù)制來說序目,A和A_copy指向的是同一個內(nèi)存資源臂痕,復(fù)制的只不過是是一個指針,對象本身資源還是只有一份宛琅,那如果我們對A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對象同樣被修改刻蟹,這其實(shí)違背了我們復(fù)制拷貝的一個思想。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對象本身嘿辟。用網(wǎng)上一哥們通俗的話將就是:淺復(fù)制好比你和你的影子舆瘪,你完蛋片效,你的影子也完蛋深復(fù)制好比你和你的克隆人,你完蛋英古,你的克隆人還活著淀衣。

2.What is advantage of categories? What is difference between implementing a category and inheritance?類別的作用?繼承和類別在實(shí)現(xiàn)中有何區(qū)別召调?答案:category 可以在不獲悉膨桥,不改變原來代碼的情況下往里面添加新的方法,只能添加唠叛,不能刪除修改只嚣。并且如果類別和原來類中的方法產(chǎn)生名稱沖突,則類別將覆蓋原來的方法艺沼,因?yàn)轭悇e具有更高的優(yōu)先級册舞。類別主要有3個作用:(1)將類的實(shí)現(xiàn)分散到多個不同文件或多個不同框架中。(2)創(chuàng)建對私有方法的前向引用障般。(3)向?qū)ο筇砑臃钦絽f(xié)議调鲸。 繼承可以增加,修改或者刪除方法挽荡,并且可以增加屬性藐石。
3.Difference between categories and extensions?類別和類擴(kuò)展的區(qū)別。答案:category和extensions的不同在于 后者可以添加屬性定拟。另外后者添加的方法是必須要實(shí)現(xiàn)的于微。extensions可以認(rèn)為是一個私有的Category。
4.Difference between protocol in objective c and interfaces in java?obc中的協(xié)議和java中的接口概念有何不同青自?答案:OBC中的代理有2層含義角雷,官方定義為 formal和informal protocol。前者和Java接口一樣性穿。informal protocol中的方法屬于設(shè)計(jì)模式考慮范疇,不是必須實(shí)現(xiàn)的雷滚,但是如果有實(shí)現(xiàn)需曾,就會改變類的屬性。其實(shí)關(guān)于正式協(xié)議祈远,類別和非正式協(xié)議我很早前學(xué)習(xí)的時候大致看過呆万,也寫在了學(xué)習(xí)教程里“非正式協(xié)議概念其實(shí)就是類別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法,你可以使用他們更好的完成工作”车份。這個意思是谋减,這些是可選的。比如我門要一個更好的方法扫沼,我們就會申明一個這樣的類別去實(shí)現(xiàn)出爹。然后你在后期可以直接使用這些更好的方法庄吼。這么看,總覺得類別這玩意兒有點(diǎn)像協(xié)議的可選協(xié)議严就。"現(xiàn)在來看总寻,其實(shí)protocal已經(jīng)開始對兩者都統(tǒng)一和規(guī)范起來操作,因?yàn)橘Y料中說“非正式協(xié)議使用interface修飾“梢为,現(xiàn)在我們看到協(xié)議中兩個修飾詞:“必須實(shí)現(xiàn)(@requied)”和“可選實(shí)現(xiàn)(@optional)”渐行。
5.What are KVO and KVC?答案:kvc:鍵 - 值編碼是一種間接訪問對象的屬性使用字符串來標(biāo)識屬性,而不是通過調(diào)用存取方法铸董,直接或通過實(shí)例變量訪問的機(jī)制祟印。很多情況下可以簡化程序代碼。apple文檔其實(shí)給了一個很好的例子粟害。kvo:鍵值觀察機(jī)制蕴忆,他提供了觀察某一屬性變化的方法,極大的簡化了代碼我磁。具體用看到嗯哼用到過的一個地方是對于按鈕點(diǎn)擊變化狀態(tài)的的監(jiān)控孽文。比如我自定義的一個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]; } } 對于系統(tǒng)是根據(jù)keypath去取的到相應(yīng)的值發(fā)生改變,理論上來說是和kvc機(jī)制的道理是一樣的夺艰。對于kvc機(jī)制如何通過key尋找到value:“當(dāng)通過KVC調(diào)用對象時芋哭,比如:[self valueForKey:@”someKey”]時,程序會自動試圖通過幾種不同的方式解析這個調(diào)用郁副。首先查找對象是否帶有 someKey 這個方法减牺,如果沒找到,會繼續(xù)查找對象是否帶有someKey這個實(shí)例變量(iVar)存谎,如果還沒有找到拔疚,程序會繼續(xù)試圖調(diào)用 -(id) valueForUndefinedKey:這個方法。如果這個方法還是沒有被實(shí)現(xiàn)的話既荚,程序會拋出一個NSUndefinedKeyException異常錯誤稚失。 (cocoachina.com注:Key-Value Coding查找方法的時候,不僅僅會查找someKey這個方法恰聘,還會查找getsomeKey這個方法句各,前面加一個get,或者_(dá)someKey以及_getsomeKey這幾種形式晴叨。同時凿宾,查找實(shí)例變量的時候也會不僅僅查找someKey這個變量,也會查找_someKey這個變量是否存在兼蕊。) 設(shè)計(jì)valueForUndefinedKey:方法的主要目的是當(dāng)你使用-(id)valueForKey方法從對象中請求值時初厚,對象能夠在錯誤發(fā)生前,有最后的機(jī)會響應(yīng)這個請求孙技。這樣做有很多好處产禾,下面的兩個例子說明了這樣做的好處排作。“來至cocoa下愈,這個說法應(yīng)該挺有道理纽绍。因?yàn)槲覀冎纀utton卻是存在一個highlighted實(shí)例變量.因此為何上面我們只是add一個相關(guān)的keypath就行了,可以按照kvc查找的邏輯理解势似,就說的過去了拌夏。
6.What is purpose of delegates?代理的作用?答案:代理的目的是改變或傳遞控制鏈履因。允許一個類在某些特定時刻通知到其他類障簿,而不需要獲取到那些類的指針≌て可以減少框架復(fù)雜度站故。另外一點(diǎn),代理可以理解為java中的回調(diào)監(jiān)聽機(jī)制的一種類似毅舆。
7.What are mutable and immutable types in Objective C?obc中可修改和不可以修改類型西篓。答案:可修改不可修改的集合類。這個我個人簡單理解就是可動態(tài)添加修改和不可動態(tài)添加修改一樣憋活。比如NSArray和NSMutableArray岂津。前者在初始化后的內(nèi)存控件就是固定不可變的,后者可以添加等悦即,可以動態(tài)申請新的內(nèi)存空間吮成。
8.When we call objective c is runtime language what does it mean?我們說的obc是動態(tài)運(yùn)行時語言是什么意思?答案:多態(tài)辜梳。 主要是將數(shù)據(jù)類型的確定由編譯時粱甫,推遲到了運(yùn)行時。這個問題其實(shí)淺涉及到兩個概念作瞄,運(yùn)行時和多態(tài)茶宵。簡單來說,運(yùn)行時機(jī)制使我們直到運(yùn)行時才去決定一個對象的類別宗挥,以及調(diào)用該類別對象指定方法节预。多態(tài):不同對象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(life)都用有一個相同的方法-eat;那人類屬于生物属韧,豬也屬于生物,都繼承了life后蛤吓,實(shí)現(xiàn)各自的eat宵喂,但是調(diào)用是我們只需調(diào)用各自的eat方法。也就是不同的對象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個選擇器)会傲。因此也可以說锅棕,運(yùn)行時機(jī)制是多態(tài)的基礎(chǔ)拙泽?~~~
9.what is difference between NSNotification and protocol?通知和協(xié)議的不同之處?答案:協(xié)議有控制鏈(has-a)的關(guān)系裸燎,通知沒有顾瞻。首先我一開始也不太明白,什么叫控制鏈(專業(yè)術(shù)語了~)德绿。但是簡單分析下通知和代理的行為模式荷荤,我們大致可以有自己的理解簡單來說,通知的話移稳,它可以一對多蕴纳,一條消息可以發(fā)送給多個消息接受者。代理按我們的理解个粱,到不是直接說不能一對多古毛,比如我們知道的明星經(jīng)濟(jì)代理人,很多時候一個經(jīng)濟(jì)人負(fù)責(zé)好幾個明星的事務(wù)都许。只是對于不同明星間稻薇,代理的事物對象都是不一樣的,一一對應(yīng)胶征,不可能說明天要處理A明星要一個發(fā)布會塞椎,代理人發(fā)出處理發(fā)布會的消息后,別稱B的發(fā)布會了弧烤。但是通知就不一樣忱屑,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感興趣要處理暇昂。因此控制鏈(has-a從英語單詞大致可以看出莺戒,單一擁有和可控制的對應(yīng)關(guān)系。
10.What is push notification?什么是推送消息急波?
11.Polymorphism从铲?關(guān)于多態(tài)性答案:多態(tài),子類指針可以賦值給父類澄暮。這個題目其實(shí)可以出到一切面向?qū)ο笳Z言中名段,因此關(guān)于多態(tài),繼承和封裝基本最好都有個自我意識的理解泣懊,也并非一定要把書上資料上寫的能背出來伸辟。最重要的是轉(zhuǎn)化成自我理解。
12.Singleton?對于單例的理解答案:11馍刮,12題目其實(shí)出的有點(diǎn)泛泛的感覺了信夫,可能說是編程語言需要或是必備的基礎(chǔ)。基本能用熟悉的語言寫出一個單例静稻,以及可以運(yùn)用到的場景或是你編程中碰到過運(yùn)用的此種模式的框架類等警没。進(jìn)一步點(diǎn),考慮下如何在多線程訪問單例時的安全性振湾。
13.What is responder chain?說說響應(yīng)鏈答案: 事件響應(yīng)鏈杀迹。包括點(diǎn)擊事件,畫面刷新事件等押搪。在視圖棧內(nèi)從上至下树酪,或者從下之上傳播∏堆裕可以說點(diǎn)事件的分發(fā)嗅回,傳遞以及處理。具體可以去看下touch事件這塊摧茴。因?yàn)閱柕奶橄蠡藝?yán)重懷疑題目出到越后面就越籠統(tǒng)绵载。
14.Difference between frame and bounds?frame和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是一個方法的名字购裙,method是一個組合體懂版,包含了名字和實(shí)現(xiàn).詳情可以看apple文檔。
16.Is there any garbage collection mechanism in Objective C.?OBC的垃圾回收機(jī)制躏率?答案: OBC2.0有Garbage collection躯畴,但是iOS平臺不提供。一般我們了解的objective-c對于內(nèi)存管理都是手動操作的薇芝,但是也有自動釋放池蓬抄。但是差了大部分資料,貌似不要和arc機(jī)制搞混就好了夯到。求更多~~
17.NSOperation queue?答案:存放NSOperation的集合類嚷缭。操作和操作隊(duì)列,基本可以看成java中的線程和線程池的概念耍贾。用于處理ios多線程開發(fā)的問題阅爽。網(wǎng)上部分資料提到一點(diǎn)是,雖然是queue荐开,但是卻并不是帶有隊(duì)列的概念付翁,放入的操作并非是按照嚴(yán)格的先進(jìn)現(xiàn)出。這邊又有個疑點(diǎn)是晃听,對于隊(duì)列來說胆敞,先進(jìn)先出的概念是Afunc添加進(jìn)隊(duì)列着帽,Bfunc緊跟著也進(jìn)入隊(duì)列,Afunc先執(zhí)行這個是必然的移层,但是Bfunc是等Afunc完全操作完以后,B才開始啟動并且執(zhí)行赫粥,因此隊(duì)列的概念離亂上有點(diǎn)違背了多線程處理這個概念观话。但是轉(zhuǎn)念一想其實(shí)可以參考銀行的取票和叫號系統(tǒng)。因此對于A比B先排隊(duì)取票但是B率先執(zhí)行完操作越平,我們亦然可以感性認(rèn)為這還是一個隊(duì)列频蛔。但是后來看到一票關(guān)于這操作隊(duì)列話題的文章,其中有一句提到“因?yàn)閮蓚€操作提交的時間間隔很近秦叛,線程池中的線程晦溪,誰先啟動是不定的≌醢希”瞬間覺得這個queue名字有點(diǎn)忽悠人了三圆,還不如pool~綜合一點(diǎn),我們知道他可以比較大的用處在于可以幫組多線程編程就好了避咆。
18.What is lazy loading?答案:懶漢模式舟肉,只在用到的時候才去初始化。也可以理解成延時加載查库。我覺得最好也最簡單的一個列子就是tableView中圖片的加載顯示了路媚。一個延時載,避免內(nèi)存過高樊销,一個異步加載整慎,避免線程堵塞。
19.Can we use two tableview controllers on one viewcontroller?是否在一個視圖控制器中嵌入兩個tableview控制器?答案:一個視圖控制只提供了一個View視圖,理論上一個tableViewController也不能放吧足陨,只能說可以嵌入一個tableview視圖慷妙。當(dāng)然,題目本身也有歧義屈留,如果不是我們定性思維認(rèn)為的UIViewController,而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個視圖控制者强法,它可以控制多個視圖控制器,比如TabbarController那樣的感覺湾笛。
20.Can we use one tableview with two different datasources? How you will achieve this?一個tableView是否可以關(guān)聯(lián)兩個不同的數(shù)據(jù)源饮怯?你會怎么處理?答案:首先我們從代碼來看嚎研,數(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ù)源教翩。因此,我覺得可以設(shè)置多個數(shù)據(jù)源啊贪壳,但是有個問題是饱亿,你這是想干嘛呢?想讓列表如何顯示闰靴,不同的數(shù)據(jù)源分區(qū)塊顯示彪笼?
21.Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個接口么蚂且?重寫一個類的方式用繼承好還是分類好配猫?為什么?Objective-c只支持單繼承杏死,如果要實(shí)現(xiàn)多繼承的話泵肄,可以通過類別和協(xié)議的方式來實(shí)現(xiàn),cocoa 中所有的類都是NSObject 的子類识埋,多繼承在這里是用protocol 委托代理 來實(shí)現(xiàn)的凡伊。
22.#import 跟#include 又什么區(qū)別 #import<> 跟 #import""又什么區(qū)別?答案:@class一般用于頭文件中需要聲明該類的某個實(shí)例變量的時候用到窒舟,在m文 件中還是需要使用#import而#import比起#include的好處就是不會引起交叉編譯系忙。
23.類變量的@protected ,@private,@public,@package聲明各有什么含義?24.id 聲明的對象有什么特性惠豺?答案:id是個很重要的類型银还,是個可以指向任何類型的指針或者可以理解為指向任何未知類型的指針。
25.MVC是什么洁墙?有什么特性蛹疯?為什么在iPhone上被廣泛運(yùn)用?答案:MVC設(shè)計(jì)模式考慮三種對象:模型對象热监、視圖對象捺弦、和控制器對象。模型對象代表 特別的知識和專業(yè)技能孝扛,它們負(fù)責(zé)保有應(yīng)用程序的數(shù)據(jù)和定義操作數(shù)據(jù)的邏輯列吼。視圖對象知道如何顯示應(yīng)用程序的模型數(shù)據(jù),而且可能允許用戶對其進(jìn)行編輯苦始∧浚控制 器對象是應(yīng)用程序的視圖對象和模型對象之間的協(xié)調(diào)者。
26.對于語句NSString* testObject = [[NSData alloc] init];testObject 在編譯時和運(yùn)行時分別是什么類型的對象陌选?
27.什么是安全釋放理郑?
28.為什么有些4.0獨(dú)有的objective-c 函數(shù)在3.1上運(yùn)行時會報(bào)錯.而4.0獨(dú)有的類在3.1上分配內(nèi)存時不會報(bào)錯蹄溉?分配的結(jié)果是什么?
29.為什么4.0獨(dú)有的c函數(shù)在3.1的機(jī)器上運(yùn)行不會報(bào)錯(在沒有調(diào)用的情況下您炉?)而4.0獨(dú)有的類名在3.1的機(jī)器上一運(yùn)行就報(bào)錯柒爵?
30.異常exception 怎么捕獲?不同的CPU結(jié)構(gòu)上開銷怎樣赚爵?C中又什么類似的方法餐弱?#####31.property中屬性retain,copy,assgin的含義分別是什么?有什么區(qū)別囱晴?將其轉(zhuǎn)換成get/set方法怎么做?有什么注意事項(xiàng)瓢谢?
32.委托是什么畸写?委托的property聲明用什么屬性?為什么氓扛?
34.Cocoa中有虛基類的概念么枯芬?怎么簡潔的實(shí)現(xiàn)?
35.自動釋放池跟GC(垃圾回收)有什么區(qū)別采郎?iPhone上有GC么千所?[pool release] 和[pool drain]有什么區(qū)別?iPhone上沒有GC蒜埋。iPhone開發(fā)的時候沒有垃圾回收機(jī)制淫痰。在垃圾回收環(huán)境中,release是一個空操作整份。因此待错,NSAutoreleasePool提供了drain方法,在引用計(jì)數(shù)環(huán)境中烈评,該方法的作用等同于調(diào)用release火俄,但在垃圾回收環(huán)境中,它會觸發(fā)垃圾回收(如果自上次垃圾回收以來分配的內(nèi)存大于當(dāng)前的閾值)讲冠。因此瓜客,在通常情況下,您應(yīng)該使用drain而不是release來銷毀自動釋放池竿开。
36.for(int index = 0; index < 20; index ++){NSString *tempStr = @”tempStr”;NSLog(tempStr);NSNumber *tempNumber = [NSNumber numberWithInt:2];NSLog(tempNumber);}這段代碼有什么問題.谱仪?會不會造成內(nèi)存泄露(多線程)?在內(nèi)存緊張的設(shè)備上做大循環(huán)時自動釋放池是寫在循環(huán)內(nèi)好還是循環(huán)外好德迹?為什么芽卿?
37.內(nèi)存管理的幾條原則時什么?按照默認(rèn)法則.那些關(guān)鍵字生成的對象需要手動釋放胳搞?在和property結(jié)合的時候怎樣有效的避免內(nèi)存泄露卸例?
38.在一個對象釋放前.如果他被加到了notificationCenter 中.不在notificationcenter中remove這個對象可能會出現(xiàn)什么問題称杨?
39.怎樣實(shí)現(xiàn)一個 singleton的類.給出思路。
40.什么是序列化或者Acrchiving,可以用來做什么,怎樣與copy結(jié)合,原理是什么?.
41. 線程與進(jìn)程的區(qū)別和聯(lián)系?答案: 進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本 單元筷转,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性姑原。程和線程的主要差別在于它們是不同的操作系統(tǒng)資源 管理方式。進(jìn)程有獨(dú)立的地址空間呜舒,一個進(jìn)程崩潰后锭汛,在保護(hù)模式下不會對其它進(jìn)程產(chǎn)生影響,而線程只是一個進(jìn)程中的不同執(zhí)行路徑袭蝗。線程有自己的堆棧和局部變 量唤殴,但線程之間沒有單獨(dú)的地址空間,一個線程死掉就等于整個進(jìn)程死掉到腥,所以多進(jìn)程的程序要比多線程的程序健壯朵逝,但在進(jìn)程切換時,耗費(fèi)資源較大乡范,效率要差一 些配名。但對于一些要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程晋辆,不能用進(jìn)程渠脉。
42.在iphone上有兩件事情要做,請問是在一個線程里按順序做效率高還是兩個線程里做效率高?為什么瓶佳?
43.runloop是什么芋膘?在主線程中的某個函數(shù)里調(diào)用了異步函數(shù),怎么樣block當(dāng)前線程,且還能響應(yīng)當(dāng)前線程的timer事件涩哟,touch事件等.
44.ios平臺怎么做數(shù)據(jù)的持久化?coredata和sqlite有無必然聯(lián)系索赏?coredata是一個關(guān)系型數(shù)據(jù)庫嗎?iOS中可以有四種持久化數(shù)據(jù)的方式: 屬性列表贴彼、對象歸檔潜腻、SQLite3和Core Data;core data可以使你以圖形界面的方式快速的定義app的數(shù)據(jù)模型器仗,同時在你的代碼中容易獲取到它融涣。core data提供了基礎(chǔ)結(jié)構(gòu)去處理常用的功能,例如保存精钮,恢復(fù)威鹿,撤銷和重做,允許你在app中繼續(xù)創(chuàng)建新的任務(wù)轨香。在使用core data的時候忽你,你不用安裝額外的數(shù)據(jù)庫系統(tǒng),因?yàn)閏ore data使用內(nèi)置的sqlite數(shù)據(jù)庫臂容。core data將你app的模型層放入到一組定義在內(nèi)存中的數(shù)據(jù)對象科雳。core data會追蹤這些對象的改變根蟹,同時可以根據(jù)需要做相反的改變,例如用戶執(zhí)行撤銷命令糟秘。當(dāng)core data在對你app數(shù)據(jù)的改變進(jìn)行保存的時候简逮,core data會把這些數(shù)據(jù)歸檔,并永久性保存尿赚。mac os x中sqlite庫散庶,它是一個輕量級功能強(qiáng)大的關(guān)系數(shù)據(jù)引擎,也很容易嵌入到應(yīng)用程序凌净”辏可以在多個平臺使用,sqlite是一個輕量級的嵌入式sql數(shù)據(jù)庫編程冰寻。與core data框架不同的是躲舌,sqlite是使用程序式的,sql的主要的API來直接操作數(shù)據(jù)表性雄。Core Data不是一個關(guān)系型數(shù)據(jù)庫,也不是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)羹奉。雖然Core Dta支持SQLite作為一種存儲類型秒旋,但它不能使用任意的SQLite數(shù)據(jù)庫。Core Data在使用的過程種自己創(chuàng)建這個數(shù)據(jù)庫诀拭。Core Data支持對一迁筛、對多的關(guān)系。
45.闡述一個nil對象從interface bulider產(chǎn)生耕挨,到載入程序運(yùn)行空間细卧,最后被釋放時所經(jīng)歷的生命周期.

完整文檔的免費(fèi)下載地址:http://download.csdn.net/detail/weasleyqi/4733438

http://blog.csdn.net/weasleyqi/article/details/8148194,文檔免費(fèi)下載地址:http://download.csdn.net/detail/weasleyqi/4733438筒占,由于本人知識有限贪庙,希望高手看到后留下您寶貴的答案,謝謝翰苫。
以下為面試題的第二部分:

46.notification是同步還是異步? kvo是同步還是異步止邮?notification是全進(jìn)程空間的通知嗎?kvo呢奏窑?
47.kvc是什么?kvo是什么?有什么特性导披?
48.響應(yīng)者鏈?zhǔn)鞘裁矗?/h5>
49.unix上進(jìn)程怎么通信?

UNIX主要支持三種通信方式:

  1. 基本通信:主要用來協(xié)調(diào)進(jìn)程間的同步和互斥
    (1)鎖文件通信
    通信的雙方通過查找特定目錄下特定類型的文件(稱鎖文件)來完成進(jìn)程間 對臨界資源訪問時的互斥埃唯;例如進(jìn)程p1訪問一個臨界資源撩匕,首先查看是否有一個特定類型文件,若有墨叛,則等待一段時間再查找鎖文件止毕。
    (2)記錄鎖文件
  2. 管道通信:適應(yīng)大批量的數(shù)據(jù)傳遞
  3. IPC :適應(yīng)大批量的數(shù)據(jù)傳遞
50.timer的間隔周期準(zhǔn)嗎模蜡?為什么?怎樣實(shí)現(xiàn)一個精準(zhǔn)的timer?
51.UIscrollVew用到了什么設(shè)計(jì)模式滓技?還能再foundation庫中找到類似的嗎哩牍?(答案眾多,不知道哪個是對的~~)

模板(Template)模式令漂,所有datasource和delegate接口都是模板模式的典型應(yīng)用膝昆,
組合模式composition,所有的containerview都用了這個模式
觀察者模式observer叠必,所有的UIResponder都用了這個模式荚孵。

52如果要開發(fā)一個類似eclipse的軟件,支持插件結(jié)構(gòu)纬朝。且開放給第三方開發(fā)收叶。你會怎樣去設(shè)計(jì)它?(大概思路)
53. main()

{
int a[5]={1,2,3,4,5};
int ptr=(int )(&a+1);
printf("%d,%d",
(a+1),
(ptr-1));
}
答:2,5
(a+1)就是a[1]共苛,(ptr-1)就是a[4],執(zhí)行結(jié)果是2.5判没,&a+1不是首地址+1,系統(tǒng)會認(rèn)為加一個a數(shù)組的偏 移隅茎,是偏移了一個數(shù)組的大谐畏濉(本例是5個int,int ptr=(int )(&a+1);則ptr實(shí)際 是&(a[5]),也就是a+5原因如下:
  &a是數(shù)組指針辟犀,其類型為 int (
)[5];而指針加1要根據(jù)指針類型加上一定的值俏竞,不同類型的指針+1之后增加的大小不同。a是長度為5的int數(shù)組指針堂竟,所以要加 5
sizeof(int)所以ptr實(shí)際是a[5]魂毁,但是prt與(&a+1)類型是不一樣的(這點(diǎn)很重要),所以prt-1只會減去sizeof(int*)出嘹,a,&a的地址是一樣的席楚,但意思不一樣,a是數(shù)組首地址税稼,也就是a[0]的地址酣胀,&a是對象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址娶聘,即a[1],&a+1是下一個對象的地址闻镶,即a[5].

54. 以下為Windows NT下的32位C++程序,請計(jì)算sizeof的值voidFunc ( char str[100] ) { sizeof( str ) =? } void *p = malloc( 100 ); sizeof ( p ) = ?

答案:這題 很常見了,Func( char str[100] )函數(shù)中數(shù)組名作為函數(shù)形參時丸升,在函數(shù)體內(nèi)铆农,數(shù)組名失去了本身的內(nèi)涵,僅僅只是一個指針;在失去其內(nèi)涵的同時墩剖,它還失去了其常量特性猴凹,可以作自增、自減等操作岭皂,可以被修改郊霎。Windows NT 32位平臺下,指針的長度(占用內(nèi)存的大幸妗)為4字節(jié)书劝,故sizeof( str ) 、sizeof( p ) 都為4土至。

55.- (void)*getNSString(const NSString *inputString)

{ inputString =@"This is a main test\n";
return ;}
-main(void)
{NSString *a=@"Main";
NSString *aString = [NSStringstringWithString:@"%@",getNSString(a)];
NSLog(@"%@\n", aString);}
最后問輸出的字符串:NULL,output在 函數(shù)返回后购对,內(nèi)存已經(jīng)被釋放。

56.列舉幾種進(jìn)程的同步機(jī)制陶因,并比較其優(yōu)缺點(diǎn)骡苞。

答案: 原子操作信號量機(jī)制 自旋鎖 管程,會合楷扬,分布式系統(tǒng)
進(jìn)程之間通信的途徑
答案:共享存儲系統(tǒng)消息傳遞系統(tǒng)管道:以文件系統(tǒng)為基礎(chǔ)
進(jìn)程死鎖的原因
答案:資源競爭及進(jìn)程推進(jìn)順序非法
死鎖的4個必要條 件
答案:互斥解幽、請求保持、不可剝奪烘苹、環(huán)路
死鎖的處理
答案:鴕鳥策略亚铁、預(yù)防策略、避免策略螟加、檢測與解除死鎖

57.堆和棧的區(qū)別

管理方式:對于棧來講,是由編譯器自動管理吞琐,無需我們手工控制捆探;對于堆來說,釋放工作由程序員控制站粟,容易產(chǎn)生memory leak黍图。
申請大小:棧:在Windows下,棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)奴烙,是一塊連續(xù)的內(nèi)存的區(qū)域助被。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下切诀,棧的大小是2M(也有的說是1M揩环,總之是一個編譯時就確定的常數(shù)),如果申請的空間超過棧的剩余空間時幅虑,將提示overflow丰滑。因此,能從棧獲得的空間較小倒庵。堆:堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu)褒墨,是不連續(xù)的內(nèi)存區(qū)域炫刷。這是由于系統(tǒng)是用鏈表來存儲的空閑內(nèi)存地址的,自然是不連續(xù)的郁妈,而鏈表的遍歷方向是由低地址向高地址浑玛。堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。由此可見噩咪,堆獲得的空間比較靈活顾彰,也比較大。
碎片問題:對于堆來講剧腻,頻繁的new/delete勢必會造成內(nèi)存空間的不連續(xù)拘央,從而造成大量的碎片,使程序效率降低书在。對于棧來講灰伟,則不會存在這個 問題,因?yàn)闂J窍冗M(jìn)后出的隊(duì)列儒旬,他們是如此的一一對應(yīng)栏账,以至于永遠(yuǎn)都不可能有一個內(nèi)存塊從棧中間彈出
分配方式:堆都是動態(tài)分配的,沒有靜態(tài)分配的堆栈源。棧有2種分配方式:靜態(tài)分配和動態(tài)分配挡爵。靜態(tài)分配是編譯器完成的,比如局部變量的分配甚垦。動態(tài)分配由alloca函數(shù)進(jìn)行分配茶鹃,但是棧的動態(tài)分配和堆是不同的,他的動態(tài)分配是由編譯器進(jìn)行釋放艰亮,無需我們手工實(shí)現(xiàn)闭翩。
分配效率:棧是機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)會在底層對棧提供支持:分配專門的寄存器存放棧的地址迄埃,壓棧出棧都有專門的指令執(zhí)行疗韵,這就決定了棧的效率比較高。堆則是C/C++函數(shù)庫提供的侄非,它的機(jī)制是很復(fù)雜的蕉汪。

58.什么是鍵-值,鍵路徑是什么?

模型的性質(zhì)是通過一個簡單的鍵(通常是個字符串)來指定的。視圖和控制器通過鍵來查找相應(yīng)的屬性值逞怨。在一個給定的實(shí)體中者疤,同一個屬性的所有值具有相同的數(shù)據(jù)類型。鍵-值編碼技術(shù)用于進(jìn)行這樣的查找—它是一種間接訪問對象屬性的機(jī)制叠赦。
鍵路徑是一個由用點(diǎn)作分隔符的鍵組成的字符串宛渐,用于指定一個連接在一起的對象性質(zhì)序列。第一個鍵的性質(zhì)是由先前的性質(zhì)決定的,接下來每個鍵的值也是相對于其前面的性質(zhì)窥翩。鍵路徑使您可以以獨(dú)立于模型實(shí)現(xiàn)的方式指定相關(guān) 對象的性質(zhì)业岁。通過鍵路徑,您可以指定對象圖中的一個任意深度的路徑寇蚊,使其指向相關(guān)對象的特定屬性笔时。

59.c和obj-c如何混用

1)obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼仗岸,處理mm文件可以識別obj-c,c,c++代碼允耿,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中扒怖,也不能出現(xiàn)obj- c的代碼较锡,因?yàn)閏pp只是cpp2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題3)在cpp中混用obj- c其實(shí)就是使用obj-c編寫的模塊是我們想要的盗痒。如果模塊以類實(shí)現(xiàn)蚂蕴,那么要按照cpp class的標(biāo)準(zhǔn)寫類的定義,頭文件中不能出現(xiàn)obj-c的東西俯邓,包括#import cocoa的骡楼。實(shí)現(xiàn)文件中,即類的實(shí)現(xiàn)代碼中可以使用obj-c的東西稽鞭,可以import,只是后綴是mm鸟整。如果模塊以函數(shù)實(shí)現(xiàn),那么頭文件要按 c的格式聲明函數(shù)朦蕴,實(shí)現(xiàn)文件中篮条,c++函數(shù)內(nèi)部可以用obj-c,但后綴還是mm或m吩抓∩婕耄總結(jié):只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關(guān)鍵是使用接口琴拧,而不能直接使用實(shí)現(xiàn)代碼,實(shí)際上cpp混用的是 obj-c編譯后的o文件嘱支,這個東西其實(shí)是無差別的蚓胸,所以可以用。obj-c的編譯器支持cpp.

60.目標(biāo)-動作機(jī)制

目標(biāo)是動作消息的接收者除师。一個控件沛膳,或者更為常見的是它的單元,以插座變量(參見"插座變量"部分)的形式保有其動作消息的目標(biāo)汛聚。
動作是控件發(fā)送給目標(biāo)的消息锹安,或者從目標(biāo)的角度看,它是目標(biāo)為了響應(yīng)動作而實(shí)現(xiàn)的方法。
程序需要某些機(jī)制來進(jìn)行事件和指令的翻譯叹哭。這個機(jī)制就是目標(biāo)-動作機(jī)制忍宋。

61.cocoatouch框架

iPhoneOS 應(yīng)用程序的基礎(chǔ)Cocoa Touch 框架重用了許多 Mac 系統(tǒng)的成熟模式,但是它更多地專注于觸摸的接口和優(yōu)化风罩。UIKit 為您提供了在 iPhone OS 上實(shí)現(xiàn)圖形糠排,事件驅(qū)動程序的基本工具,其建立在和 Mac OS X 中一樣的 Foundation 框架上超升,包括文件處理入宦,網(wǎng)絡(luò),字符串操作等室琢。
CocoaTouch 具有和 iPhone 用戶接口一致的特殊設(shè)計(jì)乾闰。有了 UIKit,您可以使用 iPhone OS 上的獨(dú)特的圖形接口控件盈滴,按鈕涯肩,以及全屏視圖的功能,您還可以使用加速儀和多點(diǎn)觸摸手勢來控制您的應(yīng)用雹熬。
各色俱全的框架 除了UIKit 外宽菜,Cocoa Touch 包含了創(chuàng)建世界一流iPhone 應(yīng)用程序需要的所有框架,從三維圖形竿报,到專業(yè)音效铅乡,甚至提供設(shè)備訪問 API 以控制攝像頭,或通過 GPS 獲知當(dāng)前位置烈菌。Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務(wù)的強(qiáng)大的 Objective-C 框架阵幸,也在需要時提供基礎(chǔ)的 C 語言 API 來直接訪問系統(tǒng)。這些框架包括:
CoreAnimation
通過 CoreAnimation芽世,您就可以通過一個基于組合獨(dú)立圖層的簡單的編程模型來創(chuàng)建豐富的用戶體驗(yàn)挚赊。
CoreAudio
CoreAudio 是播放,處理和錄制音頻的專業(yè)技術(shù)济瓢,能夠輕松為您的應(yīng)用程序添加強(qiáng)大的音頻功能荠割。
CoreData
提供了一個面向?qū)ο蟮臄?shù)據(jù)管理解決方案,它易于使用和理解旺矾,甚至可處理任何應(yīng)用或大或小的數(shù)據(jù)模型蔑鹦。
功能列表:框架分類
下面是 CocoaTouch 中一小部分可用的框架:
? 音頻和視頻
? Core Audio
? OpenAL
? Media Library
? AV Foundation
? 數(shù)據(jù)管理
? Core Data
? SQLite
? 圖形和動畫
? Core Animation
? OpenGL ES
? Quartz 2D
? 網(wǎng)絡(luò)/li>
? Bonjour
? WebKit
? BSD Sockets
? 用戶應(yīng)用
? Address Book
? Core Location
? Map Kit
? Store Kit

62.objc的內(nèi)存管理

如果您通過分配和初始化(比如[[MyClass alloc] init])的方式來創(chuàng)建對象,您就擁有這個對象箕宙,需要負(fù)責(zé)該對象的釋放嚎朽。這個規(guī)則在使用NSObject的便利方法new 時也同樣適用.
如果您拷貝一個對象,您也擁有拷貝得到的對象柬帕,需要負(fù)責(zé)該對象的釋放.
如果您保持一個對象哟忍,您就部分擁有這個對象狡门,需要在不再使用時釋放該對象。
如果您從其它對象那里接收到一個對象锅很,則您不擁有該對象其馏,也不應(yīng)該釋放它(這個規(guī)則有少數(shù)的例外,在參考文檔中有顯式的說明)粗蔚。

63.自動釋放池是什么,如何工作

當(dāng)您向一個對象發(fā)送一個autorelease消息時尝偎,Cocoa就會將該對 象的一個引用放入到最新的自動釋放池。它仍然是個正當(dāng)?shù)膶ο笈艨兀虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息致扯。當(dāng)程序執(zhí)行到作用域結(jié)束的位置時,自動釋放池就會被釋放当辐,池中的所有對象也就被釋放抖僵。

  1. ojc-c 是通過一種"referringcounting"(引用計(jì)數(shù))的方式來管理內(nèi)存的, 對象在開始分配內(nèi)存(alloc)的時候引用計(jì)數(shù)為一,以后每當(dāng)碰到有copy,retain的時候引用計(jì)數(shù)都會加一, 每當(dāng)碰到release和autorelease的時候引用計(jì)數(shù)就會減一,如果此對象的計(jì)數(shù)變?yōu)榱?, 就會被系統(tǒng)銷毀.2. NSAutoreleasePool 就是用來做引用計(jì)數(shù)的管理工作的,這個東西一般不用你管的.3. autorelease和release沒什么區(qū)別,只是引用計(jì)數(shù)減一的時機(jī)不同而已,autorelease會在對象的使用真正結(jié)束的時候才做引用計(jì)數(shù)減一.
64.類工廠方法是什么

類工廠方法的實(shí)現(xiàn)是為了向客戶提供方便,它們將分配和初始化合在一個步驟中缘揪, 返回被創(chuàng)建的對象耍群,并進(jìn)行自動釋放處理。這些方法的形式是+ (type)className...(其中 className不包括任何前綴)找筝。
工廠方法可能不僅僅為了方便使用蹈垢。它們不但可以將分配和初始化合在一起,還可以為初始化過程提供對象的分配信息袖裕。
類工廠方法的另一個目的是使類(比如NSWorkspace)提供單件實(shí)例曹抬。雖 然init...方法可以確認(rèn)一個類在每次程序運(yùn)行過程只存在一個實(shí)例,但它需要首先分配一個“生的”實(shí)例急鳄,然后還必須釋放該實(shí)例谤民。工廠 方法則可以避免為可能沒有用的對象盲目分配內(nèi)存。

65.單件實(shí)例是什么

Foundation和Application Kit 框架中的一些類只允許創(chuàng)建單件對象疾宏,即這些類在當(dāng)前進(jìn)程中的唯一實(shí)例张足。舉例來說,NSFileManager和NSWorkspace 類在使用時都是基于進(jìn)程進(jìn)行單件對象的實(shí)例化坎藐。當(dāng)向這些類請求實(shí)例的時候为牍,它們會向您傳遞單一實(shí)例的一個引用,如果該實(shí)例還不存在岩馍,則首先進(jìn)行實(shí)例的分配和初始化碉咆。 單件對象充當(dāng)控制中心的角色,負(fù)責(zé)指引或協(xié)調(diào)類的各種服務(wù)兼雄。如果類在概念上只有一個實(shí)例(比如NSWorkspace)吟逝,就應(yīng)該產(chǎn)生一個單件實(shí)例帽蝶,而不是多個實(shí)例赦肋;如果將來某一天可能有多個實(shí)例块攒,您可以使用單件實(shí)例機(jī)制,而不是工廠方法或函數(shù)佃乘。

66.動態(tài)綁定—在運(yùn)行時確定要調(diào)用的方法

動態(tài)綁定將調(diào)用方法的確定也推遲到運(yùn)行時囱井。在編譯時,方法的調(diào)用并不和代碼綁定在一起趣避,只有在消實(shí)發(fā)送出來之后庞呕,才確定被調(diào)用的代碼。通過動態(tài)類型和動態(tài)綁定技術(shù)程帕,您的代碼每次執(zhí)行都可以得到不同的結(jié)果住练。運(yùn)行時因子負(fù)責(zé)確定消息的接 收者和被調(diào)用的方法。運(yùn)行時的消息分發(fā)機(jī)制為動態(tài)綁定提供支持愁拭。當(dāng)您向一個動態(tài)類型確定了的對象發(fā)送消息時讲逛,運(yùn)行環(huán)境系統(tǒng)會通過接收者的isa指針定位對象的類,并以此為起點(diǎn)確定被調(diào)用的方法岭埠,方法和消息是動態(tài)綁定的盏混。而且,您不必在Objective-C 代碼中做任何工作惜论,就可以自動獲取動態(tài)綁定的好處许赃。您在每次發(fā)送消息時,
特別是當(dāng)消息的接收者是動態(tài)類型已經(jīng)確定的對象時馆类,動態(tài)綁定就會例行而 透明地發(fā)生混聊。

67.obj-c的優(yōu)缺點(diǎn)

objc優(yōu)點(diǎn): 1)Cateogies 2) Posing 3) 動態(tài)識別 4) 指標(biāo)計(jì)算 5)彈性訊息傳遞 6) 不是一個過度復(fù)雜的 C 衍生語言 7) Objective-C 與 C++ 可混合編程
缺點(diǎn): 1) 不支援命名空間 2) 不支持運(yùn)算符重載
3) 不支持多重繼承
4) 使用動態(tài)運(yùn)行時類型,所有的方法都是函數(shù)調(diào)用蹦掐,所以很多編譯時優(yōu)化方法都用不到技羔。(如內(nèi)聯(lián)函數(shù)等),性能低劣卧抗。

68.readwrite藤滥,readonly,assign社裆,retain拙绊,copy,nonatomic 屬性的作用泳秀?

@property是 一個屬性訪問聲明标沪,擴(kuò)號內(nèi)支持以下幾個屬性:1,getter=getterName嗜傅,setter=setterName金句,設(shè)置setter與 getter的方法名2,readwrite,readonly吕嘀,設(shè)置可供訪問級別2骑歹,assign,setter方法直接賦值徐鹤,不進(jìn)行 任何retain操作,為了解決原類型與環(huán)循引用問題3军浆,retain,setter方法對參數(shù)進(jìn)行release舊值再retain新值挡闰,所有 實(shí)現(xiàn)都是這個順序(CC上有相關(guān)資料)4乒融,copy,setter方法進(jìn)行Copy操作摄悯,與retain處理流程一樣赞季,先舊值release,再 Copy出新的對象奢驯,retainCount為1碟摆。這是為了減少對上下文的依賴而引入的機(jī)制。5叨橱,nonatomic典蜕,非原子性訪問,不加同步罗洗, 多線程并發(fā)訪問會提高性能愉舔。注意,如果不加此屬性伙菜,則默認(rèn)是兩個訪問方法都為原子型事務(wù)訪問轩缤。鎖被加到所屬對象實(shí)例級(我是這么理解的…)。

69.ViewController的 didReceiveMemoryWarning 是在什么時候被調(diào)用的贩绕?(87題)
70.談?wù)勀銓RC 的認(rèn)識和理解火的?
71. ObjC中,與alloc語義相反的方法是dealloc還是release淑倾?與retain語義相反的方法是dealloc還是release馏鹤,為什么?需要與alloc配對使用的方法是dealloc還是release娇哆,為什么湃累?

alloc與dealloc語意相反,alloc是創(chuàng)建變量碍讨,dealloc是釋放變量治力。 retain 對應(yīng)release,retain 保留一個對象。調(diào)用之后勃黍,變量的計(jì)數(shù)加1宵统。或許不是很明顯覆获,在這有例為證:

  • (void)setName : (NSString) name {
    [name retain];
    [myname release];
    myname = name; }
    我們來解釋一下:設(shè)想马澈,用戶在調(diào)用這個函數(shù)的時候益兄,他注意了內(nèi)存的管理,所以他小心的寫了如下代碼:
    NSString
    newname = [[NSString alloc] initWithString: @"John"];
    [aClasssetName: newname];
    [newnamerelease];
    我們來看一看newname的計(jì)數(shù)是怎么變化的箭券。首先,它被alloc疑枯,count = 1; 然后辩块,在setName中,它被retain荆永,count = 2; 最后废亭,用戶自己釋放newname,count= 1具钥,myname指向了newname豆村。這也解釋了為什么需要調(diào)用[myname release]。我們需要在給myname賦新值的時候骂删,釋放掉以前老的變量掌动。retain 之后直接dealloc對象計(jì)數(shù)器沒有釋放。alloc 需要與release配對使用宁玫,因?yàn)閍lloc 這個函數(shù)調(diào)用之后粗恢,變量的計(jì)數(shù)加1。所以在調(diào)用alloc 之后欧瘪,一定要調(diào)用對應(yīng)的release眷射。另外,在release一個變量之后佛掖,他的值仍然有效妖碉,所以最好是后面緊接著再var = nil。
72. 在一個對象的方法里面:

self.namehttp://self.name/ = “object”;

name =”object”
有什么不同?

73. 這段代碼有什么問題:

@implementation Person

  • (void)setAge:(int)newAge {
    self.age = newAge;
    }
    @end
74. 什么是retaincount?
75. 以下每行代碼執(zhí)行后芥被,person對象的retain count分別是多少

Person *person = [[Person alloc] init];
[person retain];
[person release];
[person release];

76. 為什么很多內(nèi)置類如UITableViewController的delegate屬性都是assign而不是retain的欧宜?
77. 定義屬性時,什么情況使用copy拴魄,assign鱼鸠,和retain?

assign用于簡單數(shù)據(jù)類型羹铅,如NSInteger,double,bool,retain和copy用戶對象蚀狰,copy用于當(dāng) a指向一個對象,b也想指向同樣的對象的時候职员,如果用assign麻蹋,a如果釋放,再調(diào)用b會crash,如果用copy 的方式焊切,a和b各自有自己的內(nèi)存扮授,就可以解決這個問題芳室。retain 會使計(jì)數(shù)器加一,也可以解決assign的問題刹勃。另外:atomic和nonatomic用來決定編譯器生成的getter和setter是否為原子操作堪侯。在多線程環(huán)境下,原子操作是必要的荔仁,否則有可能引起錯誤的結(jié)果伍宦。加了atomic,setter函數(shù)會變成下面這樣:
if(property != newValue) { [propertyrelease]; property = [newValueretain]; }

78. autorelease的對象是在什么時候被release的乏梁?

答:autorelease實(shí)際上只是把對release的調(diào)用延遲了次洼,對于每一個Autorelease,系統(tǒng)只是把該Object放入了當(dāng)前的Autoreleasepool中遇骑,當(dāng)該pool被釋放時卖毁,該pool中的所有Object會被調(diào)用Release。對于每一個Runloop落萎,系統(tǒng)會隱式創(chuàng)建一個Autoreleasepool亥啦,這樣所有的releasepool會構(gòu)成一個象CallStack一樣的一個棧式結(jié)構(gòu),在每一個Runloop結(jié)束時练链,當(dāng)前棧頂?shù)腁utoreleasepool會被銷毀禁悠,這樣這個pool里的每個Object(就是autorelease的對象)會被release。那什么是一個Runloop呢兑宇?一個UI事件碍侦,Timer call,delegate call隶糕, 都會是一個新的Runloop瓷产。那什么是一個Runloop呢?一個UI事件枚驻,Timer call濒旦,delegate call, 都會是一個新的Runloop再登。

79. 這段代碼有什么問題,如何修改

for (int i = 0; i < someLargeNumber; i++)
{
NSString *string = @”Abc”;
string = [string lowercaseString];
string = [stringstringByAppendingString:@"xyz"];
NSLog(@“%@”, string);
}

80. autorelease和垃圾回收機(jī)制(gc)有什么關(guān)系尔邓?IPhone OS有沒有垃圾回收(gc)?
81. Objective C中的protocal是什么锉矢?

@protocal obj里面的協(xié)議就如同java里面的interface梯嗽。

82. Objective C中的selector 是什么?

你可以理解 @selector()就是取類方法的編號,他的行為基本可以等同C語言的中函數(shù)指針,只不過C語言中沽损,可以把函數(shù)名直接賦給一個函數(shù)指針灯节,而Objective-C的類不能直接應(yīng)用函數(shù)指針,這樣只能做一個@selector語法來取.它的結(jié)果是一個SEL類型。這個類型本質(zhì)是類方法的編號(函數(shù)地址)炎疆。

83. Objective C中的category是什么?

Objective-C提供了一個非常靈活的類(Class)擴(kuò)展機(jī)制-類別(Category)卡骂。類別用于對一個已經(jīng)存在的類添加方法(Methods)。你只需要知道這個類的公開接口形入,不需要知道類的源代碼全跨。需要注意的是,類別不能為已存在的類添加實(shí)例變量(Instance Variables)亿遂。
子類(subclassing)是進(jìn)行類擴(kuò)展的另一種常用方法浓若。與子類相比,類別最主要的優(yōu)點(diǎn)是:系統(tǒng)中已經(jīng)存在的類可以不需修改就可使用類別的擴(kuò)展功能崩掘。
類別的第二大優(yōu)點(diǎn)是實(shí)現(xiàn)了功能的局部化封裝。類別定義可以放在一個已存在的類(類A)的定義文件中(.h)少办。這意味著這個類別只有在類A被引用的前提下才會被外部看到苞慢。如果另一個類(類B)不需要用到類A的功能(沒有包含類A的.h文件),也就不會看到依附類A存在的類別英妓。iOS SDK中廣泛運(yùn)用這種類別定義法來封裝功能挽放。

84. 什么是Notification?什么時候用delegate蔓纠,什么時候用Notification辑畦?

觀察者模式,controller向defaultNotificationCenter添加自己的notification腿倚,其他類注冊這個notification就可以收到通知纯出,這些類可以在收到通知時做自己的操作(多觀察者默認(rèn)隨機(jī)順序發(fā)通知給觀察者們,而且每個觀察者都要等當(dāng)前的某個觀察者的操作做完才能輪到他來操作敷燎,可以用NotificationQueue的方式安排觀察者的反應(yīng)順序暂筝,也可以在添加觀察者中設(shè)定反映時間,取消觀察需要在viewDidUnload跟dealloc中都要注銷)硬贯。
delegate針對one-to-one關(guān)系焕襟,并且reciever可以返回值給sender,notification可以針對one-to-one/many/none,reciever無法返回值給sender.所以饭豹,delegate用于sender希望接受到reciever的某個功能反饋值鸵赖,
notification用于通知多個object某個事件。

85. 什么是KVC和KVO拄衰?Notification和KVO有什么不同它褪?KVO在ObjC中是怎么實(shí)現(xiàn)的?
86. ViewController 的 loadView,viewDidLoad, viewDidUnload 分別是在什么時候調(diào)用的翘悉?在自定義ViewController的時候這幾個函數(shù)里面應(yīng)該做什么工作列赎?

答:viewDidLoad在view 從nib文件初始化時調(diào)用,loadView在controller的view為nil時調(diào)用。此方法在編程實(shí)現(xiàn)view時調(diào)用,view 控制器默認(rèn)會注冊memory warning notification,當(dāng)view controller的任何view 沒有用的時候包吝,viewDidUnload會被調(diào)用饼煞,在這里實(shí)現(xiàn)將retain 的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會負(fù)責(zé)release 。

87. ViewController 的didReceiveMemoryWarning 是在什么時候被調(diào)用的诗越?UIViewController類中didReceiveMemoryWarning默認(rèn)的操作是什么砖瞧?

答:默認(rèn)調(diào)用[superdidReceiveMemoryWarning]

88. UITableViewController 中,創(chuàng)建UITableViewCell時嚷狞,initWithSytle:resuseIdentifier中块促,reuseIdentifier有什么用?簡述UITableViewCell的復(fù)用原理.

復(fù)用隊(duì)列的元素增加:只有在cell被滑動出界面的時候床未,此cell才會被加入到復(fù)用隊(duì)列中竭翠。每次在創(chuàng)建cell的時候,程序會首先通過調(diào)用dequeueReusableCellWithIdentifier:cellType方法薇搁,到復(fù)用隊(duì)列中去尋找標(biāo)示符為“cellType”的cell斋扰,如果找不到,返回nil啃洋,然后程序去通過調(diào)用[[[UITableViewCell alloc]initWithStyle:style reuseIdentifier:cellType] autorelease]來創(chuàng)建標(biāo)示符為“cellType”的cell传货。

89. UIView 和CALayer 有什么區(qū)別?

兩者最大的區(qū)別是,圖層不會直接渲染到屏幕上宏娄。

90. 以 UIView 類animateWithDuration:animations: 為例问裕,簡述UIView動畫原理。

以上就是ios面試題的第二部分孵坚,有未完成的地方希望高手留下您寶貴的意見粮宛,完整文檔免費(fèi)下載地址:http://download.csdn.net/detail/weasleyqi/4733438,ios面試題第一部分:http://blog.csdn.net/weasleyqi/article/details/8148194卖宠。
在上一篇中有20道iOS面試題窟勃,這是其后半部分。

1.When to use NSMutableArray and when to use NSArray?

什么時候使用NSMutableArray逗堵,什么時候使用NSArray秉氧?
答案:當(dāng)數(shù)組在程序運(yùn)行時,需要不斷變化的蜒秤,使用NSMutableArray汁咏,當(dāng)數(shù)組在初始化后,便不再改變的作媚,使用NSArray攘滩。需要指出的是,使用NSArray只表明的是該數(shù)組在運(yùn)行時不發(fā)生改變纸泡,即不能往NSAarry的數(shù)組里新增和刪除元素漂问,但不表明其數(shù)組內(nèi)的元素的內(nèi)容不能發(fā)生改變。NSArray是線程安全的,NSMutableArray不是線程安全的蚤假,多線程使用到NSMutableArray需要注意栏饮。

2.Give us example of what are delegate methods and what are data source methods of uitableview.

給出委托方法的實(shí)例,并且說出UITableVIew的Data Source方法
答案:CocoaTouch框架中用到了大量委托磷仰,其中UITableViewDelegate就是委托機(jī)制的典型應(yīng)用袍嬉,是一個典型的使用委托來實(shí)現(xiàn)適配器模式,其中UITableViewDelegate協(xié)議是目標(biāo)灶平,tableview是適配器伺通,實(shí)現(xiàn)UITableViewDelegate協(xié)議,并將自身設(shè)置為talbeview的delegate的對象逢享,是被適配器罐监,一般情況下該對象是UITableViewController。
UITableVIew的Data Source方法有- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
3.How many autorelease you can create in your application? Is there any limit?

在應(yīng)用中可以創(chuàng)建多少autorelease對象瞒爬,是否有限制弓柱?
答案:無

4.If we don’t create any autorelease pool in our application then is there any autorelease pool already provided to us?

如果我們不創(chuàng)建內(nèi)存池,是否有內(nèi)存池提供給我們疮鲫?
答案:界面線程維護(hù)著自己的內(nèi)存池吆你,用戶自己創(chuàng)建的數(shù)據(jù)線程弦叶,則需要創(chuàng)建該線程的內(nèi)存池

5.When you will create an autorelease pool in your application?

什么時候需要在程序中創(chuàng)建內(nèi)存池俊犯?
答案:用戶自己創(chuàng)建的數(shù)據(jù)線程,則需要創(chuàng)建該線程的內(nèi)存池

6.When retain count increase?

什么時候內(nèi)存計(jì)數(shù)會增加伤哺?
答案:見iOS面試題(一)

7.What are commonly used NSObject class methods?

類NSObject的那些方法經(jīng)常被使用燕侠?
答案:NSObject是Objetive-C的基類,其由NSObject類及一系列協(xié)議構(gòu)成立莉。
其中類方法alloc绢彤、class、 description 對象方法init蜓耻、dealloc茫舶、– performSelector:withObject:afterDelay:等經(jīng)常被使用

8.What is convenience constructor?

什么是簡便構(gòu)造方法?
答案:簡便構(gòu)造方法一般由CocoaTouch框架提供刹淌,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:
Foundation下大部分類均有簡便構(gòu)造方法饶氏,我們可以通過簡便構(gòu)造方法,獲得系統(tǒng)給我們創(chuàng)建好的對象有勾,并且不需要手動釋放疹启。

9.How to design universal application in Xcode?

如何使用Xcode設(shè)計(jì)通用應(yīng)用?
答案:使用MVC模式設(shè)計(jì)應(yīng)用蔼卡,其中Model層完成脫離界面喊崖,即在Model層,其是可運(yùn)行在任何設(shè)備上,在controller層荤懂,根據(jù)iPhone與iPad(獨(dú)有UISplitViewController)的不同特點(diǎn)選擇不同的viewController對象茁裙。在View層,可根據(jù)現(xiàn)實(shí)要求势誊,來設(shè)計(jì)呜达,其中以xib文件設(shè)計(jì)時,其設(shè)置其為universal粟耻。

10.What is keyword atomic in Objective C?

在Objetive-C什么時原子關(guān)鍵字
答案:atomic查近,nonatomic 見iOS面試題(一)

11.What are UIView animations?

UIView的動畫效果有那些?
答案:有很多挤忙,如 UIViewAnimationOptionCurveEaseInOut UIViewAnimationOptionCurveEaseIn UIViewAnimationOptionCurveEaseOut UIViewAnimationOptionTransitionFlipFromLeft UIViewAnimationOptionTransitionFlipFromRight UIViewAnimationOptionTransitionCurlUpUIViewAnimationOptionTransitionCurlDown
如何使用可見該博文

12.How can you store data in iPhone applications?

在iPhone應(yīng)用中如何保存數(shù)據(jù)霜威?
答案:有以下幾種保存機(jī)制:
1.通過web服務(wù),保存在服務(wù)器上
2.通過NSCoder固化機(jī)制册烈,將對象保存在文件中
3.通過SQlite或CoreData保存在文件數(shù)據(jù)庫中

13.What is coredata?

什么是coredata戈泼?
答案:coredata是蘋果提供一套數(shù)據(jù)保存框架,其基于SQlite

14.What is NSManagedObject model?

什么是NSManagedObject模型赏僧?
答案:NSManagedObject是NSObject的子類 大猛,也是coredata的重要組成部分,它是一個通用的類,實(shí)現(xiàn)了core data 模型層所需的基本功能淀零,用戶可通過子類化NSManagedObject挽绩,建立自己的數(shù)據(jù)模型。

15.What is NSManagedobjectContext?

什么是NSManagedobjectContext驾中?
答案:NSManagedobjectContext對象負(fù)責(zé)應(yīng)用和數(shù)據(jù)庫之間的交互唉堪。

16.What is predicate?

什么是謂詞?
答案:謂詞是通過NSPredicate肩民,是通過給定的邏輯條件作為約束條件唠亚,完成對數(shù)據(jù)的篩選。
predicate = [NSPredicate predicateWithFormat:@"customerID == %d",n];
a = [customers filteredArrayUsingPredicate:predicate];

17.What kind of persistence store we can use with coredata?

使用coredata有哪幾種持久化存儲機(jī)制持痰?
答案:無
1 談?wù)剬lock 的理解灶搜?并寫出一個使用Block執(zhí)行UIVew動畫?
答案:Block是可以獲取其他函數(shù)局部變量的匿名函數(shù)工窍,其不但方便開發(fā)割卖,并且可以大幅提高應(yīng)用的執(zhí)行效率(多核心CPU可直接處理Block指令)

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ [[blueViewController view] removeFromSuperview]; [[self view] insertSubview:yellowViewController.view atIndex:0]; } completion:NULL];
2 寫出上面代碼的Block的定義。
答案:
typedef void(^animations) (void);
typedef void(^completion) (BOOL finished);

3 試著使用+ beginAnimations:context:以及上述Block的定義移剪,寫出一個可以完成

  • (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);操作的函數(shù)執(zhí)行部分
    答案:無
    網(wǎng)絡(luò)部分
    3 做過的項(xiàng)目是否涉及網(wǎng)絡(luò)訪問功能究珊,使用什么對象完成網(wǎng)絡(luò)功能?
    答案:ASIHTTPRequest與NSURLConnection
    4 簡單介紹下NSURLConnection類及+ sendSynchronousRequest:returningResponse:error:與– initWithRequest:delegate:兩個方法的區(qū)別纵苛?
    答案: NSURLConnection主要用于網(wǎng)絡(luò)訪問剿涮,其中+ sendSynchronousRequest:returningResponse:error:是同步訪問數(shù)據(jù)言津,即當(dāng)前線程會阻塞,并等待request的返回的response取试,而– initWithRequest:delegate:使用的是異步加載悬槽,當(dāng)其完成網(wǎng)絡(luò)訪問后,會通過delegate回到主線程瞬浓,并其委托的對象初婆。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猿棉,隨后出現(xiàn)的幾起案子磅叛,更是在濱河造成了極大的恐慌,老刑警劉巖萨赁,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弊琴,死亡現(xiàn)場離奇詭異,居然都是意外死亡杖爽,警方通過查閱死者的電腦和手機(jī)敲董,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慰安,“玉大人腋寨,你說我怎么就攤上這事』溃” “怎么了萄窜?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锣杂。 經(jīng)常有香客問我脂倦,道長番宁,這世上最難降的妖魔是什么元莫? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蝶押,結(jié)果婚禮上踱蠢,老公的妹妹穿的比我還像新娘。我一直安慰自己棋电,他們只是感情好茎截,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赶盔,像睡著了一般企锌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上于未,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天撕攒,我揣著相機(jī)與錄音陡鹃,去河邊找鬼。 笑死抖坪,一個胖子當(dāng)著我的面吹牛萍鲸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擦俐,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脊阴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚯瞧?” 一聲冷哼從身側(cè)響起嘿期,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埋合,沒想到半個月后秽五,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饥悴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年坦喘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西设。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓣铣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贷揽,到底是詐尸還是另有隱情棠笑,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布禽绪,位于F島的核電站蓖救,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏印屁。R本人自食惡果不足惜循捺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雄人。 院中可真熱鬧从橘,春花似錦、人聲如沸础钠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旗吁。三九已至踩萎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間很钓,已是汗流浹背香府。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工翻具, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人回还。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓裆泳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柠硕。 傳聞我的和親對象是個殘疾皇子工禾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

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

  • 1.埋點(diǎn)是做什么的 2.如何進(jìn)行埋點(diǎn) 3.埋點(diǎn)方案的設(shè)計(jì) 近期常被問到這個問題,我擔(dān)心我的答案會將一些天真爛漫的孩...
    lxg閱讀 2,015評論 0 1
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,716評論 0 4
  • 2017年整理的116道IOS開發(fā)面試題 時間:2017-05-08 發(fā)布:iOS培訓(xùn) 來源:IOS職場 分享到:...
    有理想有暴富的小青年閱讀 857評論 0 10
  • 文中的問題多收集整理自網(wǎng)絡(luò)蝗柔,不保證100%準(zhǔn)確闻葵,還望斟酌采納。 1癣丧、怎樣防止指針的越界使用問題? 答案: 1 .防...
    江河_ios閱讀 411評論 0 0
  • 37.cocoa內(nèi)存管理規(guī)則 1)當(dāng)你使用new槽畔,alloc或copy方法創(chuàng)建一個對象時,該對象的保留計(jì)數(shù)器值為1...
    如風(fēng)家的秘密閱讀 843評論 0 4