技術(shù)-網(wǎng)上收集百道面試題_第1頁(yè)
技術(shù)-網(wǎng)上收集百道面試題_第2頁(yè)
技術(shù)-網(wǎng)上收集百道面試題_第3頁(yè)
技術(shù)-網(wǎng)上收集百道面試題_第4頁(yè)
技術(shù)-網(wǎng)上收集百道面試題_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

IOS面試題匯Differencebetweenshallowcopyanddeepcopy?淺和深的區(qū)別?答案:淺層:只指向?qū)ο蟮闹羔?,而不?duì)象本身。:對(duì)象本身。意思就是說(shuō)我有個(gè)A對(duì)象一后到A_op對(duì)后對(duì)淺說(shuō),和Aopy向是一內(nèi)資,只不過(guò)是個(gè)針對(duì)本資源還只一,如我對(duì)A_op執(zhí)了改作,么現(xiàn)的對(duì)同被改這實(shí)背我拷的個(gè)想就理了,存存了兩獨(dú)象身。用上哥通的將是:好你的你你也深Whatisadvantageofcategories?Whatisdifferencebetweenimplementingacategoryandinheritance?類(lèi)別的作用?繼承和類(lèi)別在實(shí)現(xiàn)中有何區(qū)別?答案:category可以在不獲悉,不改變?cè)瓉?lái)代碼的情況下往里面添加新的方法,只能添加,不能刪除修改。并且如果類(lèi)別和原來(lái)類(lèi)中的方法產(chǎn)生名稱(chēng),則類(lèi)別將覆蓋原來(lái)的方法,因?yàn)轭?lèi)別具有更高的優(yōu)先級(jí)。類(lèi)別主要有3個(gè)作用:(1)將類(lèi)的實(shí)現(xiàn)分散到多個(gè)不同文件或多個(gè)不同框架中。(2)創(chuàng)建對(duì)私有方法的前向。(3)向?qū)ο筇砑臃钦絽f(xié)議。繼承可以增加,修改或者刪除方法,并且可以增加屬性。Differencebetweencategoriesandextensions?類(lèi)別和類(lèi)擴(kuò)展的區(qū)別。答案:category和extensions的不同在于的。extensions可以認(rèn)為Differencebetweenprotocolinobjectivecandinterfacesinjava?obc中的協(xié)議和java中的接口概念有何不同?答案:OBC中的有2層含義,定義為formal和informalprotocol。前者和Java接口一樣。informalprotocol中的方法屬于設(shè)計(jì)模式考慮范疇,不是必須實(shí)現(xiàn)的,但是如果有實(shí)現(xiàn),就會(huì)改變類(lèi)的屬性。其實(shí)關(guān)于正式協(xié)議,類(lèi)別和非正式協(xié)議我很早前學(xué)習(xí)的時(shí)候大致看過(guò),也寫(xiě)在了學(xué)習(xí)里“非正式協(xié)議概念其實(shí)就是類(lèi)別的另一種表達(dá)方式“這里有一些你可能希望實(shí)現(xiàn)的方法,你可以使用他們更好的完成工作”。這個(gè)意思是,這些是可選的。比如我門(mén)要一個(gè)更好的方法,我們就會(huì)申明一個(gè)這樣的類(lèi)別去實(shí)現(xiàn)。然后你在后期可以直接使用這些更好的方法。這么看,總覺(jué)得類(lèi)別這玩意兒有點(diǎn)像協(xié)議的可選協(xié)議。實(shí)protocal已經(jīng)開(kāi)始對(duì)兩者都統(tǒng)一和規(guī)范起來(lái)操作,因?yàn)橘Y料中說(shuō)“非正式協(xié)議使用interface修飾“,現(xiàn)在我們看到協(xié)議中兩個(gè)修飾詞:“必須實(shí)現(xiàn)WhatareKVOandKVC?答案:kvc:鍵-值編碼是一種間接對(duì)象的屬性使用字符串來(lái)標(biāo)識(shí)屬性,而不是通過(guò)調(diào)用存取方法,直接或通過(guò)實(shí)例變量的機(jī)制。很多情況下可以簡(jiǎn)化程序代碼。apple文檔其實(shí)給了一個(gè)很好的例子。kvo:鍵值觀察機(jī)制,他提供了觀察某一屬性變化的方法,極大的簡(jiǎn)化了代碼。具體用看到嗯哼用到過(guò)的一個(gè)地方是對(duì)于按鈕點(diǎn)擊變化狀態(tài)的的。比如我自定義的一個(gè)button[cpp][selfaddObserver:selfforKeyPath:@"highlighted"options:0context:nil];#pragmamark-(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)object*)changecontext:(void if([keyPathisEqualToString:@"highlighted"] [self }對(duì)系是據(jù)kepat去的相的發(fā)改,論來(lái)是和v制道是樣。對(duì)于vc機(jī)如通ey找vale:當(dāng)KV調(diào)對(duì)時(shí)比:[slfaluForey:”smeK”]時(shí)程會(huì)動(dòng)圖過(guò)種同方解這調(diào)。查對(duì)是帶有somKey這方,如果找,繼查對(duì)是帶有omeey個(gè)例量Va,果沒(méi)找,序繼試圖調(diào)用-(i)vlueorUdefnedey這方。果個(gè)還沒(méi)被現(xiàn)話(huà)程會(huì)出個(gè)NSUnefiedKyExepton異錯(cuò)。 ( :Ke-Vaueodig找法時(shí),僅僅查omeey個(gè)法還查getomeey個(gè)法前加個(gè)ge,_omeey 有很多好處,下面的兩個(gè)例子說(shuō)明了這樣做的好處?!皝?lái)至cocoa,這個(gè)說(shuō)法應(yīng)該挺有道理。因?yàn)槲覀冎纀utton卻是存在一個(gè)highlighted實(shí)例變量.因此為何上面我們只是add一個(gè)相關(guān)的keypath就行了,Whatispurposeofdelegates?的作用?答案:的目的是改變或傳遞控制鏈。允許一個(gè)類(lèi)在某些特定時(shí)刻通知到其他類(lèi),而不需要獲取到那些類(lèi)的指針。可以減少框架復(fù)雜度。另外一點(diǎn),WhataremutableandimmutabletypesinObjectiveC?obc中可修改和不可以修改類(lèi)型。答Whenwecallobjectivecisruntimelanguagewhatdoesitmean?obc是動(dòng)態(tài)運(yùn)行時(shí)語(yǔ)言是什么意思?答案:多態(tài)。主要是將數(shù)據(jù)類(lèi)型的確定由編譯時(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ì)象的類(lèi)別,以及調(diào)用該類(lèi)別對(duì)象指定方法。多態(tài):不同對(duì)象以自己的方式響應(yīng)相同的消息的能力叫做多態(tài)。意思就是假設(shè)生物類(lèi)(life)都用有一個(gè)相同的方法-eat;了life后,實(shí)現(xiàn)各自的eat,但是調(diào)用是我們只需調(diào)用各自的eat方法。也就是不同的對(duì)象以自己的方式響應(yīng)了相同的消息(響應(yīng)了eat這個(gè)選擇器)。因此也可以說(shuō),運(yùn)行時(shí)機(jī)制是多態(tài)的基礎(chǔ)?~~~whatisdifferencebetweenNSNotificationandprotocol?通知和協(xié)議的不同之處?答案:協(xié)議有控制鏈(has-a(專(zhuān)業(yè)術(shù)語(yǔ)了~)。但是簡(jiǎn)單分析下通知和的行為模式,我們大致可以有自己的理解簡(jiǎn)單來(lái)說(shuō),通知的話(huà),它可以一對(duì)多,一條消息可以發(fā)送給多個(gè)消息接受者。按我們的理解,到不是直接說(shuō)不能一對(duì)多,比如我們知道的經(jīng)濟(jì)人,很多時(shí)候一個(gè)經(jīng)濟(jì)人負(fù)責(zé)好幾個(gè)的事務(wù)。只是對(duì)于不同間,的事物后,別稱(chēng)B的發(fā)布會(huì)了。但是通知就不一樣,他只關(guān)心發(fā)出通知,而不關(guān)心多少接收到感要處理。WhatispushnotificationPolymorphism?態(tài)性答案:多態(tài),子類(lèi)指針可以賦值給父類(lèi)。切面向?qū)ο笳Z(yǔ)言中料上寫(xiě)的能背出來(lái)。最重要的是轉(zhuǎn)化成自我理解。Singleton理解答案:11,12題目其實(shí)出的有點(diǎn)泛泛的感覺(jué)了,可能說(shuō)是編程語(yǔ)言需要或是必備的基礎(chǔ)?;灸苡檬煜さ恼Z(yǔ)言寫(xiě)出一個(gè)單例,以及可以運(yùn)用到的場(chǎng)景或是你編碰到過(guò)運(yùn)用的此種模式的框架類(lèi)等。進(jìn)一步點(diǎn),考慮下如何在多線(xiàn)程單例時(shí)的安全性。Whatisresponderchain?說(shuō)說(shuō)響應(yīng)鏈答案:事件響應(yīng)鏈。包括點(diǎn)擊事件,畫(huà)面刷新事件等。在視圖棧內(nèi)從上至下,或者從下之上??梢哉f(shuō)點(diǎn)事件的分發(fā),傳遞以及處理。具體可以去看下touch事件這塊。因?yàn)閱?wèn)的太抽象化了嚴(yán)重懷疑題目出到越后面就越籠統(tǒng)。Differencebetweenframeandbounds?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))Differencebetweenmethodandselector?同?答案:selector是一個(gè)方法的名字,method是一個(gè)組合體,包含了名字.詳情可以看apple文檔。IsthereanygarbagecollectionmechanisminObjectiveC.?OBC的回收機(jī)制?答案:OBC2.0有Garbagecollection,但是iOS解的objective-c對(duì)于內(nèi)存管理都是手動(dòng)操作的,但是也有自動(dòng)釋放池。但是差了大部分資料,貌似不要和arc機(jī)制搞混就好了。求~~SOpratonueu?NSpertiojv線(xiàn)程的念用處理o線(xiàn)開(kāi)的題。部資提一是雖是quu但是funBfuc,Afnc但是BfunAfuc,B概。是念實(shí)以考行取和號(hào)統(tǒng)。因?qū)比先隊(duì)票是率執(zhí)中有一句提到得這個(gè)queue名字有點(diǎn)人了,還不如pool~綜合一點(diǎn),我們知道他可以比較大的用處在于可以幫組多線(xiàn)Whatislazyloading?答案:懶漢模式,只在用到的時(shí)候才去初始化。我覺(jué)得最好也最簡(jiǎn)單的一個(gè)列子就是tableView中的加載顯示了。一個(gè)延時(shí)載,避免內(nèi)存過(guò)高,一Canweusetwotableviewcontrollersononeviewcontroller?個(gè)tableview控制器?答案:一個(gè)視圖控制只提供了一個(gè)View視圖,理論上一個(gè)tableViewController也tableview視圖。當(dāng)然,題目本身也有歧義,如果不是我們定性思維認(rèn)為的UIViewController,而是宏觀的表示視圖控制者,那我們倒是可以把其看成一個(gè)視圖控制者,它可以控制多個(gè)視圖控制器,比如TabbarController那樣的感覺(jué)。Canweuseonetableviewwithtwodifferentdatasources?Howyouwillachievethis?一個(gè)tableView是否可以關(guān)聯(lián)兩個(gè)不同的數(shù)據(jù)源?你會(huì)怎么處理?答案:首先我們從代碼來(lái)看,數(shù)據(jù)源如何 方法里實(shí)現(xiàn)的。因此我們并不關(guān)心如何去關(guān)聯(lián)他,他怎么關(guān)聯(lián)上,方法只是讓我返回根據(jù)自己的需要去設(shè)置如相關(guān)的數(shù)據(jù)源Objective-c只支持單繼承,如果要實(shí)現(xiàn)多繼承的話(huà),可以通過(guò)類(lèi)別和協(xié)議的方式來(lái)實(shí)現(xiàn),cocoa中所有的類(lèi)都是NSObject的子類(lèi),多繼承在這里是用protocol委托來(lái)實(shí)現(xiàn)的。#import#include區(qū)別import<>import""@class一般用于頭文件中需要該類(lèi)的某個(gè)實(shí)例變量的時(shí)候用到,在m文件中還是需要使用#import而#import比起類(lèi)變量的@protected,@private,@public,@package各有什么含義id的對(duì)象有什么特性?答案:id是個(gè)很重要的類(lèi)型,是個(gè)可以指向任何類(lèi)型的指針或者可以理MVC是什么?有什么特性?為什么在上被廣泛運(yùn)用?答案:MVC設(shè)計(jì)模式考慮三種對(duì)象:模型對(duì)象、視圖對(duì)象、和控制器對(duì)象。模型對(duì)象代表特別的知識(shí)和專(zhuān)業(yè)技能,它們負(fù)責(zé)保有應(yīng)用程序的數(shù)據(jù)控制器對(duì)象是應(yīng)用程序的視圖對(duì)象和模型對(duì)象之間的協(xié)調(diào)者。對(duì)于語(yǔ)句N(xiāo)SString*testObjectNSDataallocinit];testObject為什么有些4.0獨(dú)有的objective-c3.1上運(yùn)行時(shí)會(huì)報(bào)錯(cuò).而4.0獨(dú)有的類(lèi)在3.1上分配內(nèi)存時(shí)不怎么捕獲?不同的自動(dòng)釋放池跟GC(回收)有什么區(qū)別?上有GC么?[poolrelease]和[pooldrain]有什么區(qū)別?上沒(méi)有GC。開(kāi)發(fā)的時(shí)候沒(méi)有回收機(jī)制。在回收環(huán)境中,release是一值)。因此,在通常情況下,您應(yīng)該使用drain而不是release來(lái)銷(xiāo)毀自動(dòng)釋放池。for(intindex=0;index<20;index++){NSString*tempStr=@”tempStr”;NSLog(tempStrNSNumber*tempNumberNSNumbernumberWithInt:2];NSLog(tempNumber段遵循CocoaTouch的使用原則一定要用對(duì)特性關(guān)鍵字,對(duì)于“內(nèi)存泄漏”,一定要申請(qǐng)了要負(fù)責(zé)釋放,要細(xì)心。關(guān)鍵字alloc或new生成的對(duì)象需要手動(dòng)釋放;在一個(gè)對(duì)象釋放前.如果他被加到了notificationCenter.不在notificationcenter中remove這個(gè)對(duì)singleton的類(lèi).給出思路線(xiàn)程與進(jìn)程的區(qū)別和聯(lián)系?答案:進(jìn)線(xiàn)程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。線(xiàn)程的主要差別在于它們是不同的操作系統(tǒng)資源管理方進(jìn)的不同執(zhí)行路徑。線(xiàn)程有自己的堆棧和局部變量,但線(xiàn)程之間沒(méi)有單獨(dú)的地址空間,一個(gè)線(xiàn)程死率要差一些。但對(duì)于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線(xiàn)程,不能用進(jìn)程。iOS中可以有四種持久化數(shù)據(jù)的方式:屬性列表、對(duì)象歸檔、3和CoreData;coredata可以使你以圖形界面的方式快速的定義app的數(shù)據(jù)模型,同時(shí)在你的代碼中容易獲取到它。coredata提供了基礎(chǔ)結(jié)data的時(shí)候,你不用安裝額外的數(shù)據(jù)庫(kù)系統(tǒng),因?yàn)閏oredata使用內(nèi)置的數(shù)據(jù)庫(kù)。coredata將你app的模型層放入到一組定義在內(nèi)存中的數(shù)據(jù)對(duì)象。coredata會(huì)追蹤這些對(duì)象的改變,同時(shí)可以根據(jù)需要做相反的改變,例如用戶(hù)執(zhí)行撤銷(xiāo)命令。當(dāng)coredata在對(duì)你app數(shù)據(jù)的改變進(jìn)行保存的時(shí)候,coredata會(huì)把這些數(shù)據(jù)歸檔,并永久性保存。macosx中庫(kù),它是一個(gè)輕量級(jí)功能強(qiáng)大的關(guān)系數(shù)據(jù)引擎,data框架不同的是,是使用程序式的,sql的主要的API來(lái)直接操作數(shù)據(jù)表。CoreData不是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),也不是關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。雖然CoreDta支持 不能使用任意的數(shù)據(jù)庫(kù)。CoreData在使用的過(guò)程種自己創(chuàng)建這個(gè)數(shù)據(jù)庫(kù)。CoreData支持對(duì)一、對(duì)闡述一個(gè)nil對(duì)象從interfacebulider產(chǎn)生,到載入程序運(yùn)行空間,最后被釋放時(shí)所經(jīng)歷的生命周UIResponderUIKIT事件響應(yīng)的基類(lèi)。窗口上的所有事件觸發(fā),都由該類(lèi)響應(yīng)(即事件處理)。所以,窗口上的View及控制器都是派生于該類(lèi)的,例如UIView、UIViewController等。調(diào)用UIResponder。使用事件響應(yīng),最典型的場(chǎng)景就是頁(yè)面導(dǎo)航了。我們知道,一個(gè)UIView,是不能直接嵌入U(xiǎn)INavigationController(UIViewController),這就意味著,如果當(dāng)前的頁(yè)面是一個(gè)UIView(例如自定義的UITableViewCell),當(dāng)前頁(yè)面就無(wú)法使用pushViewController調(diào)用UIResponder的nextResponder前的事件響應(yīng)類(lèi)。最終交由UIViewController響應(yīng),這時(shí)UIView可以使用pushViewController法4、直到遇到響應(yīng)者才會(huì)停止,否則事件將一直上傳,直到UIWindow通信的雙方通過(guò)查找特定下特定類(lèi)型的文件(稱(chēng)鎖文件)來(lái)完成進(jìn)程間對(duì)臨界資源時(shí) {intint*ptr=(int*)(&a+1);}答*(a+1)就是a[1],*(ptr-1)就是a[4],執(zhí)行結(jié)果是2.5,&a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大?。ū纠?個(gè)int,int*ptr=(int*)(&a+1);則ptr實(shí)際是&(a[5]),也就是a+5原因如下:&aint*)[51要根據(jù)指針類(lèi)型加上一定的值,不同類(lèi)型的指針+1之后增加的大小不同。a是長(zhǎng)度為5的int數(shù)組指針,所以要加5*sizeof(int)所以ptr實(shí)際是a[5],但是prt與(&a+1)類(lèi)型是不一樣的(這點(diǎn)很重要),所以prt-1只會(huì)減去sizeof(int*),a,&a的地址是一樣的,以下為WindowsNT下的32位C++程序,請(qǐng)計(jì)算sizeof的值voidFunccharstr[100] sizeof(str) void*p=malloc(100);sizeof(p)=答案:這題很常見(jiàn)了,Func(charstr[100])函數(shù)中數(shù)組名作為函數(shù)形參時(shí),在函數(shù)體內(nèi),數(shù)組名失去操作,可以被修改。WindowsNT32位平臺(tái)下,指針的長(zhǎng)度(占用內(nèi)存的大?。?字節(jié),故sizeof(strsizeof(p為455.-(void)*getNSString(constNSString inputString=@"Thisisamaintest\n";return;}-{NSStringNSString*aString=[NSStringstringWithString:@"%@",getNSString(a)];NSLog(@"%@\n",aString);}最后問(wèn)輸出的字符串:NULL,output在放 死鎖的4個(gè)必要條件 制,容易產(chǎn)生memoryleak。Windows下,棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。這句話(huà)的意思是一個(gè)編譯時(shí)就確定的常數(shù)),如果申請(qǐng)的空間超過(guò)棧的剩余overflow。因此,能從棧效率降低。對(duì)于棧來(lái)講,則不會(huì)存在這個(gè)問(wèn)題,因?yàn)闂J窍冗M(jìn)后出的隊(duì)列,他們是如此的一一對(duì)應(yīng),以2alocC/()它一間對(duì)屬的制。相關(guān)以指定對(duì)象圖中的一個(gè)任意深度的路徑,使其指向相關(guān)對(duì)象的特定屬性。碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現(xiàn)objc的代碼,因?yàn)閏pp只是cpp2)mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問(wèn)題3)在cpp中混用objc其就是使用obj-c編寫(xiě)的模塊是我們想要的。如果模塊以類(lèi)實(shí)現(xiàn),那么要按照cppclass的標(biāo)準(zhǔn)寫(xiě)類(lèi)的定義,頭文件中不能出現(xiàn)obj-c的東西,包括#importcocoa的。實(shí)現(xiàn)文件中,即類(lèi)的實(shí)現(xiàn)代碼中可以使用obj-c的東西,可以import,只是后綴是mm。如果模塊以函數(shù)實(shí)現(xiàn),那么頭文件要按c的格式函數(shù),實(shí)現(xiàn)文件中,c++函數(shù)內(nèi)部可以用obj-c,但后綴還是mm或m??偨Y(jié):只要cpp文件和cppinclude的文件cpp混用的是obj-c編譯后的o文件,這個(gè)東西其實(shí)是無(wú)差別的,所以可以用。obj-c的編譯器支持cpp.OS應(yīng)用程序的基礎(chǔ)CocoaTouch框架重用了許多Mac系統(tǒng)的成熟模式,但是它地專(zhuān)注于觸摸的接口和優(yōu)化。UIKit為您提供了在OS上實(shí)現(xiàn)圖形,事件驅(qū)動(dòng)程序的基本工具,其建立在和MacOSX中一樣的Foundation框架上,包括文件處理,網(wǎng)絡(luò),字符串操作等。CocoaTouch具有和用戶(hù)接口一致的特殊設(shè)計(jì)。有了UIKit,您可以使用OS上的獨(dú)特的各色俱全的框架除了UIKit外,CocoaTouch包含了創(chuàng)建世界一流應(yīng)用程序需要的所有框架,從三維圖形,到專(zhuān)業(yè)音效,甚至提供設(shè)備API以控制頭,或通過(guò)GPS獲知當(dāng)前位置。CocoaTouch既包含只需要幾行代碼就可以完成全部任務(wù)的強(qiáng)大的Objective-C框架,也在需要時(shí)提供基礎(chǔ)的C語(yǔ)言API來(lái)直接系統(tǒng)。這些框架包括:通過(guò)CoreAnimation,您就可以通過(guò)一個(gè)基于組合獨(dú)立圖層的簡(jiǎn)單的編程模型來(lái)創(chuàng)建豐富的用戶(hù)體驗(yàn)。CocoaTouch架CoreMediaAVCoreCoreOpenGLQuartzBSDAddressCoreMapStore如果您通過(guò)分配和初始化(比如[[MyClassalloc]init])的需要負(fù)責(zé)該對(duì)象的釋放。這個(gè)規(guī)則在使用NSObject的便利方法new時(shí)也同樣適用.如果您從其它對(duì)象那里接收到一個(gè)對(duì)象,則您不擁有該對(duì)象,也不應(yīng)該釋放它(當(dāng)您向一個(gè)對(duì)象發(fā)送一個(gè)autorelease消息時(shí),Cocoa就會(huì)將該對(duì)象的一個(gè)放入到的自動(dòng)釋放1.ojc-c是通過(guò)一種"referringcounting"(計(jì)數(shù))的方式來(lái)管理內(nèi)存的,對(duì)象在開(kāi)始分配內(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)銷(xiāo)毀.2.NSAutoreleasePool就是用來(lái)做計(jì)數(shù)的管理工作的,這個(gè)東西一般不用你管的.3.autorelease和類(lèi)工廠方法的實(shí)現(xiàn)是為了向客戶(hù)提供方便,它們將分配和初始化合在一個(gè)步驟中對(duì)象type)className...(其中className不包括任何前類(lèi)工廠方法的另一個(gè)目的是使類(lèi)(比如NSWorkspace)init類(lèi)工廠方法則可以避免為可能沒(méi)有用的對(duì)象盲目分配內(nèi)存。Foundation和ApplicationKit框架中的一些類(lèi)只允許創(chuàng)建單件對(duì)象,即這些類(lèi)在當(dāng)前進(jìn)的唯一實(shí)例。舉例來(lái)說(shuō),NSFileManager和NSWorkspace類(lèi)在使用時(shí)都是基于進(jìn)程進(jìn)行單件對(duì)象的實(shí)例化。當(dāng)向這配和初始化。單件對(duì)象充當(dāng)控制中心的角色,負(fù)責(zé)指引或協(xié)調(diào)類(lèi)的各種服務(wù)。如果類(lèi)在概念上只有一個(gè)實(shí)例(NSWorkspace),就應(yīng)該產(chǎn)生一個(gè)單件實(shí)例,而不是多個(gè)實(shí)例;如果將來(lái)某一天可能有多個(gè)實(shí)例,您可以使用單件實(shí)例機(jī)制,而不是工廠方法或函數(shù)。的結(jié)果。運(yùn)行時(shí)因子負(fù)責(zé)確定消息的接收者和被調(diào)用的方法。運(yùn)行時(shí)的消息分發(fā)機(jī)制為動(dòng)態(tài)綁定提供支類(lèi),并以此為起點(diǎn)確定被調(diào)用的方法,方法和消息是動(dòng)態(tài)綁定的。而且,您不必在Objective-C做 2) 3)動(dòng)態(tài)識(shí) 4)指標(biāo)計(jì) 6)不是一個(gè)過(guò)度復(fù)雜的C衍生語(yǔ)言 7)Objective-C與C++可混合編程 1)不支援命名空間 屬性的作用?@property是一個(gè)屬性,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:1,getter=getterName,setter=setterName,設(shè)置setter與getter的方法名2,readwrite,readonly,設(shè)置可供級(jí)別2,assign,setter方法直接賦值,不進(jìn)行任何retain操作,為了解決原類(lèi)型與環(huán)循問(wèn)題3,retain,setter方法對(duì)參數(shù)進(jìn)行release舊值再retain新值,所有現(xiàn)都是這個(gè)順序(CC上有相關(guān)資料4,copy,setter方法進(jìn)行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對(duì)象,retainCount為1。這是為了減少對(duì)上下文的依賴(lài)而引入的機(jī)制。5,nonatomic,非原子性,不加同步,多線(xiàn)程ViewControllerdidReceiveMemoryWarning(87題談?wù)勀銓?duì)ARC解ARC是iOS5ARC(AutomaticReferenceCounting)。簡(jiǎn)單地說(shuō),就是代碼中自動(dòng)加管理部分代碼。有一點(diǎn),ARC并不是GC,它只是一種代碼靜態(tài)分析(Staticyzer)工具?;镜腁RC代碼中不能使用retainrelease,retain, [superdealloc])不能使用NSAllocateObject,不能在Cidvoid*間的如果cast(bridge不能使用NSAutoReleasePool、而需要@autoreleasepool 不能使用“new(如果使用會(huì)有下面的編譯錯(cuò)誤”P(pán)roperty’ssynthesizedgetterfollowsCocoanamingconventionforreturning‘owned’ARCxCode內(nèi)存操作的代碼(如:retain,releaseARC能在iOS4iOS5weakrefrences能在iOS5程在去掉所有的assign性變?yōu)槭褂肁RC不能直接調(diào)用dealloc能調(diào)用retain,release,autorelease,reraubCount括@selector(retain)的方式也不行也不能在dealloc去掉[superdealloc]ARC父deallocCoreFoundation可以用CFRetain,CFRelease不能在使用NSAllocateObjectNSDeallocateObject不能在c建一個(gè)Objective-idvoid*之間沒(méi)有簡(jiǎn)便的轉(zhuǎn)換方法,同樣在Objective-ccoreFoundation函數(shù)不能再使用NSAutoreleasePoolARC了@autoreleasepool代替 區(qū)(不能再使用outlet當(dāng)使用weakStoryBoardnib層對(duì)象要用strongweak本的assign,strong當(dāng)于alloc與dealloc語(yǔ)意相反,alloc是創(chuàng)建變量,dealloc是釋放retain應(yīng)release,retain留證(void)setName:(NSString*)name{[nameretain];[mynamerelease];myname=name;}NSString*newname=[[NSStringalloc]initWithString:@"John"];[aClasssetName:newname];我們來(lái)看一看newname的計(jì)數(shù)是怎么變化的。首先,它被alloc,count=1;然后,在setName中,它被retain,count=2;最后,用戶(hù)自己釋放newname,count=1,myname指向了newname。這也解釋了為什么需要調(diào)用[mynamerelease]。我們需要在給myname賦新值的時(shí)候,釋放掉以前老的變量。retain之后直接dealloc對(duì)象計(jì)數(shù)器沒(méi)有釋放。alloc與release配對(duì)使用,因?yàn)閍lloc量的計(jì)數(shù)加1。所以在調(diào)用alloc之后,一定要調(diào)用對(duì)應(yīng)的release。另外,在release一個(gè)變量之后,他的值仍然有效,所以最好是后面緊接著再var=nil。<>=“object”;name=”object”@implementation(void)setAge:(int)newAge{self.age=newAge;}什么是retainCount返回當(dāng)前內(nèi)存的計(jì)數(shù)值。當(dāng)內(nèi)存被開(kāi)辟后,默認(rèn)的計(jì)數(shù)為1以下每行代碼執(zhí)行后,對(duì)象的retaincount分別是多少*=[[alloc]init];[[[比如說(shuō)它是否已經(jīng)被釋放,做一些操作。但是實(shí)際上它retainCount還是1,沒(méi)有被釋放掉,要在UITableViewController的dealloc里面才被釋放掉(這里舉個(gè)例子,一般retain的對(duì)象都是在assi于單據(jù)型如NSnteer,oube,bol,eta和co戶(hù)象,op用當(dāng)指一對(duì)象,也指同的象時(shí),果assgna果,調(diào)用會(huì)cash如cpy的式a和b自自的存就以決個(gè)題retin會(huì)數(shù)加,可解決ssin問(wèn)。另外: onaomi用決編器成getesetr是為子作在線(xiàn)環(huán)下原子操是要,則可引錯(cuò)的果加了tom,tte函會(huì)成面樣:if(property!=newValue){ property= 答:utoeleserelasAuoreeasOjectAutrelaseoooooObecelesRulooAutrelaseooreeaspooCalStakRunooAutoelesepolpoolbjetutoelese)rleaRulooUITimrcal,deegaecll,unlopunloU,Tmercal,deleatecal,Ruloo。for(inti=0;i<someLargeNumber;{NSString*string=@”Abc”;string=[stringlowercaseString];string=[stringstringByAppendingString:@"xyz"];NSLog(@“%@”,string);}autorelease和回收機(jī)制(gc)有什么關(guān)系?OS有沒(méi)有回收ObjectiveC中的protocal@protocalobj里面的協(xié)議就如同java里面的interfaceObjectiveC中的selector么你可以理解@selector()就是取類(lèi)方法的編號(hào),他的行為基本可以等同C語(yǔ)言的中函數(shù)指針,只不過(guò)C語(yǔ)言中,可以把函數(shù)名直接賦給一個(gè)函數(shù)指針,而Objective-C的類(lèi)不能直接應(yīng)用函數(shù)指針,這樣只能做一個(gè)@selector語(yǔ)法來(lái)取.它的結(jié)果是一個(gè)SEL類(lèi)型。這個(gè)類(lèi)型本質(zhì)是類(lèi)方法的編號(hào)(函數(shù)地址)。ObjectiveC中的category添加方法(Methods)。你只需要知道這個(gè)類(lèi)的公開(kāi)接口,不需要知道類(lèi)的源代碼。需要注意的是,類(lèi)別不能為已存在的類(lèi)添加實(shí)例變量(InstanceVariables)。的功能(沒(méi)有包含類(lèi)A的.h文件),也就不會(huì)看到依附類(lèi)A存在的類(lèi)別。iOSSDK中廣泛運(yùn)用這種類(lèi)別定義法觀者式ontollr向efaltNtifcatonCnte添自的noifiatin其類(lèi)個(gè)notiicaio(icaionueuwDiUnladdealo。什么是KVCKVO?Notification、delegateKVO同?KVOObjCKVC,即是指NSKeyValueCoding,一個(gè)非正式的Protocol,提供一種機(jī)制來(lái)間接對(duì)象的屬性。KVOKVCKey-ValueObservingKVO)KVC對(duì)象的KVCkeypath值的變化。delegatenotification,delegate值就是delegate果。和delegate一樣,KVO和NSNotification的作用也是類(lèi)與類(lèi)之間的通信,與delegate不同的是1)這兩個(gè)都是負(fù)責(zé)發(fā)出通知,剩下的事情就不管了,所以沒(méi)有返回值;2)delegate以ViewControllerloadView,viewDidLoad,viewDidUnload定答:viewDidLoad在viewnib文件初始化時(shí)調(diào)用,loadView在controller的view為nil時(shí)調(diào)用。此方法在編程實(shí)現(xiàn)view時(shí)調(diào)用,view控制器默認(rèn)會(huì)memorywarningnotification,當(dāng)viewcontroller的任何view沒(méi)有用的時(shí)候,viewDidUnload會(huì)被調(diào)用,在這里實(shí)現(xiàn)將retain的viewrelease,如果是retain的IBOutletview屬性則不要在這里release,IBOutlet會(huì)負(fù)責(zé)release。ViewControllerdidReceiveMemoryWarning?UIViewController類(lèi)cell的時(shí)候,程序會(huì)首先通過(guò)調(diào)用dequeueReusableCellWithIdentifier:cellType方法,到復(fù)用隊(duì)列中去尋找標(biāo)示符為“cellType”的cell,如果找不到,返回nil,然后程序去通過(guò)調(diào)用[[[UITableViewCellalloc]initWithStyle:stylereuseIdentifier:cellType]autorelease]來(lái)創(chuàng)建標(biāo)示符為“cellType”的UIViewCALayer別UIViewanimateWithDuration:animations簡(jiǎn)述UIView理UIView對(duì)象中支持動(dòng)畫(huà)的幾個(gè)屬性 iosUIViewUIKit每個(gè)視圖對(duì)象的背后都有一個(gè)CoreAnimation是一CALayer渲和MacOS不同的是,ios將CoreAnimation集成到視圖渲染實(shí)現(xiàn) 。由于SDK中UIKit提供了透的接口,開(kāi)發(fā)者大部分情況下,不必去關(guān)心和直接CoreAnimation。但是如果要實(shí)現(xiàn)特別復(fù)雜的渲染和動(dòng)畫(huà),就需要使用到CoreAnimationCoreAnimation基當(dāng)視圖的drawRectCoreAnimation把和視圖對(duì)象相關(guān)聯(lián)的層在層樹(shù)的層次結(jié)構(gòu)中??梢栽趯訕?shù)中添加特殊層,實(shí)現(xiàn)態(tài)渲染樹(shù):運(yùn)行在單獨(dú)的線(xiàn)程上,不影響app程缺點(diǎn):由于層需要額外的緩存數(shù)據(jù),因此會(huì)耗費(fèi)的內(nèi)存補(bǔ)充面ObjectC中創(chuàng)建線(xiàn)程的方法是什么?如果在主線(xiàn)執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代線(xiàn)程創(chuàng)建有三種方法:使用NSThread創(chuàng)建、使用的dispatch、使用子類(lèi)化的NSOperation,然后將其加入NSOperationQueue;在主線(xiàn)程執(zhí)行代碼,方法是performSelectorOnMainThread,如果想延時(shí)執(zhí)行代碼可以用performSelector:onThread:withObject:waitUntilDone:2、做過(guò)的項(xiàng)目是否涉及網(wǎng)絡(luò)功能,使用什么對(duì)象完成網(wǎng)絡(luò)功能?答案:ASIHTTPRequestNSURLConnection3、介紹下NSURLConnection及+sendSynchronousRequest:returningResponse:error:與–initWithRequest:delegate:兩個(gè)方法的區(qū)別?答案 +sendSynchronousRequest:returningResponse:error:是同步數(shù)據(jù),即當(dāng)前線(xiàn)程會(huì)阻塞,并等待request的返回的response,而–initWithRequest:delegate:使用的是異步加載,當(dāng)其完成網(wǎng)絡(luò)后,會(huì)通過(guò)delegate4、iOS試在項(xiàng)目什么時(shí)候選擇使用,什么時(shí)候選擇項(xiàng)目中使用NSOperation優(yōu)點(diǎn)是NSOperation的高度抽象,在項(xiàng)目中使用它,會(huì)使項(xiàng)目的程序面試時(shí),面試官會(huì)先問(wèn)一些,是否了解block,是否使用過(guò)block,這些問(wèn)題相當(dāng)于開(kāi)場(chǎng)白,往往是下面使用block使用delegate首先要了解什么是委托模式,委托模式在iOS其在設(shè)計(jì)模式中是適配器模式中的對(duì)象適配器,Objective-Cid節(jié): 使用block回調(diào)的block定義在委托對(duì)象函數(shù)內(nèi)部,使代碼更為緊湊;適配對(duì)象不再需要實(shí)現(xiàn)具體某個(gè)protocol,代碼更為簡(jiǎn)潔。多線(xiàn)程與Block使用dispatch_async編程實(shí)例dispatch_asyncvoiddispatch_async(dispatch_queue_tqueue,dispatch_block_t功能:在指定的隊(duì)列里提交一個(gè)異步執(zhí)行的block通過(guò)queue控制blockfinishBlock6、在應(yīng)用中如何保存數(shù)據(jù)?通過(guò)或CoreData保存在文件數(shù)據(jù)庫(kù)7、什么是答案:coredata架是apple、持補(bǔ)充答案:上面是翻譯的,按我個(gè)人理解coredata提供一種一機(jī)制,讓我們可以方便的把內(nèi)存中對(duì)象,及對(duì)象間的關(guān)系,映射到coredata,然后由它為我們持久化數(shù)據(jù)。相比普通的文件數(shù)據(jù)庫(kù) 功能更強(qiáng)大,不需要我們先將對(duì)象數(shù)據(jù)format成SQL句,存入數(shù)據(jù)庫(kù),再用select語(yǔ)句讀出,而現(xiàn)在是從內(nèi)存到coredatacoredatamanaged的對(duì)象,這里是coerdata框架的實(shí)現(xiàn)細(xì)節(jié)。BTW:其他常用的持久化方法:存入到文件、存入到NSUserDefaults(系統(tǒng)plist)。9、什么是NSManagedObject

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論