iOS面試筆記、面試題_第1頁
iOS面試筆記、面試題_第2頁
iOS面試筆記、面試題_第3頁
iOS面試筆記、面試題_第4頁
iOS面試筆記、面試題_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、頁碼:43/43面試題筆記注意事項(xiàng):內(nèi)存管理、多線程、核心動(dòng)畫、表重用,推送,數(shù)據(jù)持久化。前程無憂、智聯(lián)招聘。1.編程題 寫一個(gè)View 從屏幕頂端動(dòng)畫移動(dòng)到底部interface TimingCurveViewController : UIViewController IBOutlet UIImageView *basketBall;- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event UIView beginAnimations:"movement" context:nil; UIView se

2、tAnimationCurve:UIViewAnimationCurveEaseIn; /<label id="code.timingcurve.easeIn"/> UIView setAnimationDuration:1.0f; UIView setAnimationRepeatCount:3; UIView setAnimationRepeatAutoreverses:YES; CGPoint center = basketBall.center; if(center.y > 85.0f) center.y -= 295.0f; basketBall

3、.center = center; else center.y += 295.0f; basketBall.center = center; UIView commitAnimations;2.寫一個(gè)內(nèi)聯(lián)函數(shù),將字符串“#ff3344”換成相應(yīng)的UIColor對(duì)象- (UIColor *)getColor:(NSString*)hexColorunsigned int red,green,blue;NSRange range;range.length = 2; range.location = 0;NSScanner scannerWithString:hexColor substringWi

4、thRange:rangescanHexInt:&red; range.location = 2;NSScanner scannerWithString:hexColor substringWithRange:rangescanHexInt:&green; range.location = 4;NSScanner scannerWithString:hexColor substringWithRange:rangescanHexInt:&blue; return UIColor colorWithRed:(float)(red/255.0f)green:(float)(

5、green / 255.0f) blue:(float)(blue / 255.0f)alpha:1.0f;self.view setBackgroundColor:self getColor:"FF0000"3.將字符串“abcdefghijklmn”中的efg 截取出來替換攢成gfeNSString* str = "abcdefghij"str replace : "efg" ,“gfe”;4.寫一個(gè)取當(dāng)前日期的方法,輸入字符串,格式如下2010-02-19/獲取當(dāng)前時(shí)間 NSDate * nowDate = NSDate dat

6、e;/格式化日期,其實(shí)就是利用一個(gè)日期格式化對(duì)象把日期轉(zhuǎn)換成字符串了/先定義一個(gè)NSDateFormatter對(duì)象,然后給這個(gè)格式對(duì)象定義成自己想要的格式,然后用它去轉(zhuǎn)化其他日期即可 NSDateFormatter *format1=NSDateFormatter allocinit; format1 setDateFormat:"yyyy/MM/dd HH:mm:ss" NSString *str1=format1 stringFromDate:nowDate; NSLog(“%",str1);5.解釋類、對(duì)象、實(shí)例方法和實(shí)例成員 類:一類事物的抽象,有成員和方

7、法。 對(duì)象:類的實(shí)例化和具體化 實(shí)例方法:主要和類方法區(qū)別,類方法聲明時(shí)前面用加號(hào),實(shí)例方法聲明時(shí)用減號(hào) 實(shí)例成員:主要和類成員區(qū)分,類成員加static,實(shí)例成員不需要。6.、類名、方法名、成員名、函數(shù)名、宏定義首字母哪些大寫,哪些小寫 大寫:類名,宏定義 小寫:方法名,成員名,函數(shù)名 7.public,protected,private區(qū)別 public:完全公開,在程序的任何地方都可以調(diào)用 private:和public相反,只能在該類內(nèi)部調(diào)用 protected:只有自己和自己的子類可以調(diào)用 8.如何聲明一個(gè)帶兩個(gè)參數(shù)的實(shí)例方法和如何調(diào)用(舉例說明) 聲明:-(void)methodF

8、orParameter1:(NSString *)p1 Parameter2:(NSString *)p2; 調(diào)用:self methodForParameter1:"" Parameter2:"" 9.property (nonatomic, retain) Example *example; 寫出其setter和getter方法 getter - (Example *)example return _example; setter -(void)setExample:(Example *)aExample if (example != aExampl

9、e) example release; example = aExample retain; 10.static關(guān)鍵字的作用,extern關(guān)鍵字的作用 static:定義全局變量;定義類成員;定義內(nèi)部函數(shù) extern:聲明外部變量和外部函數(shù),所聲明的變量和函數(shù)可能不在本文件內(nèi)定義或?qū)崿F(xiàn) 11.、解釋self self就是實(shí)例本身,在類里用self來調(diào)用自身的方法 12.什么時(shí)候使用繼承?什么時(shí)候使用類別 給一個(gè)類增加新的數(shù)據(jù)成員時(shí)用繼承,只是想擴(kuò)展類的方法或覆蓋原來的方法時(shí)用類別 13.如何聲明一個(gè)類 class Example或者 interface Example end 14.寫出12

10、個(gè)與動(dòng)態(tài)調(diào)用有關(guān)的方法 respondsToSelector 、performSelector、conformsToProtocol、isKindOfClass、isMemberOfClass 15.寫一個(gè)協(xié)議(舉例),協(xié)議有什么用 protocol ExampleProtocol <NSObject> - (void)exampleProtocol; end interface ExampleClass : NSObject id<ExampleProtocol> delegate; property (nonatomic,assign) id<ExampleP

11、rotocol> delegate; end 一個(gè)通過協(xié)議對(duì)外提供接口。 16.存放數(shù)字用哪個(gè)類,存放CGRect用什么類型 存放數(shù)字用NSNumber 存放CGRect用NSValue 17.快速枚舉(舉例) NSArray *array = NSArray array; for (id object in array) object test; 18.有哪些集合類可存放二進(jìn)制數(shù)據(jù)類 NSArray/NSMutableArray,NSDictionary/NSMutableDictionary,NSSet/NSMutableSet/NSCountedSet,NSData存放二進(jìn)制數(shù)據(jù)

12、19.文件處理用哪些類(寫12個(gè)) NSFileManagerNSUserDefaults open, fopen20.解釋retain、copy、assgin、autorelease retain,copy:計(jì)數(shù)器加一,區(qū)別是retain是原對(duì)象計(jì)數(shù)器加一,copy是創(chuàng)建一個(gè)新對(duì)象后,新對(duì)象計(jì)數(shù)器加一 assgin:簡(jiǎn)單復(fù)制,計(jì)數(shù)器不變 autorelease:內(nèi)存延遲釋放,計(jì)數(shù)器延遲減一 21.寫出歸檔相關(guān)類 NSKeyedArchiver、NSKeyedUnarchiver 22.寫出xml解析和網(wǎng)絡(luò)相關(guān)類 xml解析:NSXMLParser, kissXML GDATA網(wǎng)絡(luò):NSCon

13、nection 23.常用的xml/json解析和http請(qǐng)求第三方包各寫出一個(gè) xml:kissxml json:SBJSon http請(qǐng)求:ASIHttpRequest SDWebImage, 異步圖片加載器(界面流暢)異步mp3 異步video24.代理和通知的區(qū)別 代理是垂直的,通知可以平行的 25.寫出幾個(gè)常用的設(shè)計(jì)模式(兩個(gè)以上) MVC設(shè)計(jì)模式 單例模式 代理模式 通知模式 工廠模式26.新的關(guān)鍵字:class 類名;解決循環(huán)引用問題,提高性能class僅僅告訴編譯器,在進(jìn)行編譯的時(shí)候把后面的名字作為一個(gè)類來處理。(1)class的作用:聲明一個(gè)類,告訴編譯器某個(gè)名稱是一個(gè)類(2

14、)開發(fā)中引用一個(gè)類的規(guī)范27.http和scoket通信的區(qū)別。 http是客戶端用http協(xié)議進(jìn)行請(qǐng)求,發(fā)送請(qǐng)求時(shí)候需要封裝http請(qǐng)求頭,并綁定請(qǐng)求的數(shù)據(jù),服務(wù)器一般有web服務(wù)器配合(當(dāng)然也非絕對(duì))。 http請(qǐng)求方式為客戶端主動(dòng)發(fā)起請(qǐng)求,服務(wù)器才能給響應(yīng),一次請(qǐng)求完畢后則斷開連接,以節(jié)省資源。服務(wù)器不能主動(dòng)給客戶端響應(yīng)(除非采取http長(zhǎng)連接技術(shù))。iphone主要使用類是NSUrlConnection scoket是客戶端跟服務(wù)器直接使用socket“套接字”進(jìn)行連接,并沒有規(guī)定連接后斷開,所以客戶端和服務(wù)器可以保持連接通道,雙方都可以主動(dòng)發(fā)送數(shù)據(jù)。一般在游戲開發(fā)或股票開發(fā)這種要求即

15、時(shí)性很強(qiáng)并且保持發(fā)送數(shù)據(jù)量比較大的場(chǎng)合使用。主要使用類是CFSocketRef28.問,mvc設(shè)計(jì)模式是什么? 你還熟悉什么設(shè)計(jì)模式?設(shè)計(jì)模式:并不是一種新技術(shù),而是一種編碼經(jīng)驗(yàn),使用比如java中的接口,iphone中的協(xié)議,繼承關(guān)系等基本手段,用比較成熟的邏輯去處理某一種類型的事情,總結(jié)為所謂設(shè)計(jì)模式。面向?qū)ο缶幊讨?,java已經(jīng)歸納了23中設(shè)計(jì)模式。mvc設(shè)計(jì)模式 ,可以將整個(gè)應(yīng)用程序在思想上分成三大塊,模型,視圖,控制器,對(duì)應(yīng)是的數(shù)據(jù)的存儲(chǔ)或處理,前臺(tái)的顯示,業(yè)務(wù)邏輯的控制。 Iphone本身的設(shè)計(jì)思想就是遵循mvc設(shè)計(jì)模式。代理模式:代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象

16、控制對(duì)源對(duì)象的引用.比如一個(gè)工廠生產(chǎn)了產(chǎn)品,并不想直接賣給用戶,而是搞了很多代理商,用戶可以直接找代理商買東西,代理商從工廠進(jìn)貨.常見的如QQ的自動(dòng)回復(fù)就屬于代理攔截代理模式在iphone中得到廣泛應(yīng)用.單例模式,說白了就是一個(gè)類不通過alloc方式創(chuàng)建對(duì)象,而是用一個(gè)靜態(tài)方法返回這個(gè)類的對(duì)象。系統(tǒng)只需要擁有一個(gè)全局對(duì)象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為,比如想獲得UIApplication sharedApplication;任何地方調(diào)用都可以得到 UIApplication的對(duì)象,這個(gè)對(duì)象是全局唯一的。觀察者模式。 當(dāng)一個(gè)物體發(fā)生變化時(shí),會(huì)通知所有觀察這個(gè)物體的觀察者讓其做出反應(yīng)。實(shí)現(xiàn)起來

17、無非就是把所有觀察者的對(duì)象給這個(gè)物體,當(dāng)這個(gè)物體的發(fā)生改變,就會(huì)調(diào)用遍歷所有觀察者的對(duì)象調(diào)用觀察者的方法從而達(dá)到通知觀察者的目的。工廠模式public class Factorypublic static Sample creator(int which)if (which=1)return new SampleA(); else if (which=2)return new SampleB(); 29.代理模式和觀察者模式有什么區(qū)別?代理模式為兩個(gè)對(duì)象協(xié)同完成一個(gè)請(qǐng)求,代理模式常用于代理攔截,比如qq的自動(dòng)回復(fù)。 觀察者模式則是一個(gè)對(duì)象發(fā)生變化,可以調(diào)用所有的觀察者對(duì)象的方法完成通知觀察者的

18、目的30.你在開發(fā)項(xiàng)目中時(shí),用到了哪些數(shù)據(jù)存儲(chǔ)方式,iphone中常見的方式有哪些,各有什么區(qū)別?數(shù)據(jù)存儲(chǔ)五種形式的應(yīng)用范圍和性能區(qū)別(core data, sqllite,對(duì)象序列化,文件直接讀寫,NSUserDefault(保存數(shù)據(jù)到temp文件夾中))性能比較:文件直接讀寫 >core data> 對(duì)象序列化> sqllite31.線程的常見方法有哪些,你是如何處理多線程的,多線程同步問題你了解么?線程創(chuàng)建的幾種方式,線程的加鎖,休眠,喚醒,解鎖,退出,多線程要考慮同步問題,解決同步問題的方式就是對(duì)某一資源加鎖,當(dāng)一個(gè)線程操作本資源時(shí),其他線程不能操作 。系統(tǒng)自帶線程池

19、(NSOpertionQueue)的作用凡是需要啟動(dòng)多個(gè)線程的地方都可以使用NSOpertionQueue,加入到NSOpertionQueue中的對(duì)象都需要繼承NSOpertion。 NSOpertionQueue會(huì)在系統(tǒng)內(nèi)部啟動(dòng)一個(gè)獨(dú)立線程去執(zhí)行這個(gè)被加入對(duì)象的main方法。常用的地方是用NSOpertionQueue 下載圖片,文件。如果是自己創(chuàng)建一個(gè)線程池,無非就是啟動(dòng)多個(gè)線程的時(shí)候,把這些線程對(duì)象放到一個(gè)大數(shù)組中,如果需要啟動(dòng)線程的時(shí)候,先從數(shù)組中找空閑線程來使用。自己管理線程池最大的難題是不好處理當(dāng)啟動(dòng)多個(gè)線程后,用戶在多個(gè)界面的跳轉(zhuǎn)的時(shí)候,對(duì)線程方法的回調(diào)管理。而NSOperti

20、onQueue可以很好的處理他。32.init和initwithobject區(qū)別(語法)init創(chuàng)建的對(duì)象不帶自動(dòng)釋放33.你使用過json解析方式么,他們的底層是如何處理的你了解么?json解析的用法,用框架的用法簡(jiǎn)單介紹:底層原理遍歷字符串中的字符,最終根據(jù)格式規(guī)定的特殊字符,比如號(hào),號(hào), : 號(hào) 等進(jìn)行區(qū)分, 號(hào)是一個(gè)字典的開始,號(hào)是一個(gè)數(shù)組的開始, : 號(hào)是字典的鍵和值的分水嶺,最終乃是將json數(shù)據(jù)轉(zhuǎn)化為字典,字典中值可能是字典,數(shù)組,或字符串而已。34.xml解析的原理是什么,你還用過其他解析方式么?NSXMLParser。其他解析方式有自定義二進(jìn)制解析,就是按字節(jié)去解析,電話會(huì)談

21、就是如此, 還可以是字符串之間用特殊符號(hào)連接的數(shù)據(jù),將此數(shù)據(jù)用特殊符號(hào)可以分割成所用數(shù)據(jù)。35.協(xié)議是什么,有什么作用. 協(xié)議是通過網(wǎng)絡(luò),計(jì)算機(jī)使用者進(jìn)行通訊后,互相進(jìn)行約定規(guī)定的集合。協(xié)議很像java中的接口,某個(gè)類實(shí)現(xiàn)協(xié)議后,就必須實(shí)現(xiàn)協(xié)議中規(guī)定的require的方法,比如一個(gè)類A, 一個(gè)類B都實(shí)現(xiàn)某“協(xié)議”后,這個(gè)類A的對(duì)象和B的對(duì)象都可以賦值給這個(gè)協(xié)議的類型變量,比如 id<協(xié)議> 變量名 = A類或B類的對(duì)象, 于是這個(gè)變量就36.類別有什么作用?類別的使用 。 類別有三大作用,1、 可以使本來需要在.h中聲明的方法放到.m文件中聲明,達(dá)到了可以使方法不對(duì)外公開。 2 、

22、可以方便的擴(kuò)展類,甚至系統(tǒng)類都可以輕易擴(kuò)展,維護(hù)了代碼原本的結(jié)構(gòu)不受影響。3 、類別可以寫到不同的.h或.m文件中,可以分散代碼到跟類別的擴(kuò)展功能相關(guān)聯(lián)的地方,方便查看。37.分線程回調(diào)主線程方法是什么,有什么作用? self performSelectorOnMainThread:selector(buttonGo2) withObject:nil waitUntilDone:YES;self performSelector:selector(buttonGo2) onThread:NSThread mainThread withObject:nil waitUntilDone:YES;需要

23、即時(shí)刷新ui控件的時(shí)候,經(jīng)常使用。38.你說你做過iphone閱讀器,如果要讀取一個(gè)文本文件,請(qǐng)問你是如何處理編碼問題的?另外像pdf格式的文件,你如何讀取。iphone手機(jī)閱讀器中對(duì)于PDF格式的閱讀,可以直接用UIWebView控件顯示,也可以從網(wǎng)上下到很多直接讀取pdf格式的代碼直接從pdf中得到數(shù)據(jù)。Xcode4.1之后系統(tǒng)框架有所拓展。39.復(fù)雜表格動(dòng)畫 -(void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; -(void)dele

24、teRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 40.你在開發(fā)大型項(xiàng)目的時(shí)候,如何進(jìn)行內(nèi)存泄露檢測(cè)的。 可以通過xcode的自帶工具run-start with performance tool里有instruments下有個(gè)leaks工具,啟動(dòng)此工具

25、后,運(yùn)行項(xiàng)目,工具里可以顯示內(nèi)存泄露的情況,雙擊可找到源碼位置,可以幫助進(jìn)行內(nèi)存泄露的處理。41.你做iphone開發(fā)時(shí)候,有哪些傳值方式?View和view之間是如何傳值的? 對(duì)象的property屬性傳值。方法參數(shù)傳值。靜態(tài)方法傳值NSUserDefault傳值NSNotificationCenter還有用給指向指針的指針賦值的方式傳值。42.讓一個(gè)物體從界面中的一點(diǎn)運(yùn)動(dòng)到另外一點(diǎn),有哪些方法?四種方式,1 beginAnimation(開始動(dòng)畫) 2 線程 3 NSTimer(計(jì)時(shí)器) 4 圖層動(dòng)畫(路徑),5 touch事件43.你了解哪些加密方式? Base64, MD5等常見加密方

26、式, 循環(huán)右移位等自定義加密方式45.NSNotificationCenter 的作用? 注冊(cè)方法,可以在不同的類中調(diào)用,常用于系統(tǒng)退出時(shí)調(diào)用方法保存系統(tǒng)狀態(tài),有時(shí)可以用于界面之間的切換。46.問,軟件更新如果想增加原表字段的辦法? 軟件覆蓋更新可以保存上個(gè)軟件的數(shù)據(jù)庫(kù),可以用sql語句增加原表中的字段。問,通信的同步異步問題,問,你下載電影的處理是同步還是異步。 通信則分為主線程中直接請(qǐng)求,服務(wù)器返回遲緩可導(dǎo)致程序卡死,如果啟動(dòng)線程或線程隊(duì)列,則不影響主線程運(yùn)行,說白了就是可以進(jìn)行其他操作,可稱為異步。 下載電影用了對(duì)象池技術(shù),為異步請(qǐng)求。問,線程同步是什么?如何實(shí)現(xiàn)? 多線程環(huán)境中,一個(gè)線

27、程訪問資源時(shí),讓其他線程不能訪問此資源,表示同步。讓線程同步,就是對(duì)資源加鎖。NSCondition對(duì)象,調(diào)用lock方法。問,如果leaks不能檢測(cè)出內(nèi)存泄露,還有什么其他的內(nèi)存檢測(cè)工具。 Clang工具。問,軟件如何發(fā)布? 花99美元或299美元注冊(cè)個(gè)人或公司帳號(hào)后,可以下載開發(fā)者證書進(jìn)行聯(lián)機(jī)調(diào)試(只需要把證書拖入xcode),選擇device進(jìn)行編譯就可以在手機(jī)上運(yùn)行。但如果想發(fā)布,還需要下載發(fā)布證書,添加到xcode編譯后app包上傳到蘋果官方網(wǎng)站審核,大約2個(gè)星期內(nèi)可以發(fā)布成功。如果軟件內(nèi)包含付費(fèi)內(nèi)容,則需要在程序中添加IAP,蘋果是要求付費(fèi)分成。內(nèi)存管理原則。1,誰創(chuàng)建誰釋放2,r

28、etain和release配對(duì)3,管理好自動(dòng)釋放對(duì)象,用的時(shí)候加retain, 用完后release4,自動(dòng)釋放池使用原則, 借鑒for循環(huán)1萬次不停創(chuàng)建自動(dòng)釋放的對(duì)象的處理方式。-(void) threadAutoreleasePoolNSArray *someArray;NSAutoreleasePool *pool;pool = NSAutoreleasePool alloc init;int i;for(i = 0; i<1000000; i+)id object = someArray objectAtIndex:i;NSString *desc = object descri

29、ption;if(i%1000 = 0)pool release;pool = NSAutoreleasePool alloc init;問,iphone里是否支持try-catch支持,可以用于檢測(cè)異常,跟java的的try-catch的區(qū)別是多了個(gè).問,你平時(shí)是如何學(xué)習(xí)iphone的,常去哪些外國(guó)網(wǎng)站。 (自己查)問,如果網(wǎng)絡(luò)出現(xiàn)問題,你連接通信的時(shí)候如何處理? 用NSError 判斷,如果不為空,則說明網(wǎng)絡(luò)開始連接就出現(xiàn)問題了。 如果是連接中出現(xiàn)了問題,則自動(dòng)調(diào)用NSUrlConnection的錯(cuò)誤處理的委托方法(最好記住方法是什么)。問,進(jìn)度條在進(jìn)度過程中如何過一會(huì)改變進(jìn)度條的填充顏色

30、。 問,如何讓一個(gè)背景的顏色進(jìn)行漸變。問,如何實(shí)現(xiàn)翻書特效,如何處理?問,你項(xiàng)目主要用哪些組件,(直接說出組件類名,顯得熟練)問,iphone和ipad里有什么區(qū)別,有哪些組件不一樣。問,你是從iphone幾開始做開發(fā)的,iphone3和iphone4 有什么區(qū)別。你如何做到兼容。iphone真機(jī)的內(nèi)存是多少,iphone3,iphone4,ipad的分辨率都是多少?問,你的多方通話項(xiàng)目用的是發(fā)送音頻流技術(shù)么? 不是,我們用的電話回?fù)芗夹g(shù),服務(wù)器有聯(lián)通的接口,只需要把多個(gè)聯(lián)系人的電話發(fā)給服務(wù)器即可,為提高通信速度,使用二進(jìn)制數(shù)據(jù)通信。問,xml,json,自定義而進(jìn)制解析各自的特點(diǎn)和優(yōu)勢(shì)劣勢(shì)。

31、問,你做過游戲開發(fā)么?熟悉opengl和coco2d技術(shù)么? 我做過游戲開發(fā),比如j2me的飛機(jī)射擊,格斗等游戲。coco2d是一種大型開源2d游戲開發(fā)引擎,支持的功能更為豐富,如果游戲沒有用到太復(fù)雜的數(shù)理功能,可以把其中的部分功能處理提取出來,因?yàn)樵趇phone游戲開發(fā)中,只需要知道圖形處理(比如圖片的剪切和翻轉(zhuǎn)等)就可以實(shí)現(xiàn)把j2me的游戲轉(zhuǎn)為iphone游戲,把java代碼改變?yōu)閏+即可(.mm或cpp文件),因?yàn)榇蠖嗍褂脭?shù)組,所以改變起來差距不大,只是變語言而已。問: cell單元格中內(nèi)容太多,以至于拖動(dòng)時(shí)有卡的現(xiàn)象,如何處理? if(cell=nil) / 重復(fù)東西寫在內(nèi)部 問:如何

32、讓tabbarController在屏幕右側(cè)顯示? 自定義tabbar問:如何處理iphone軟件升級(jí)問題iphone軟件新版本重新提交到app store之后,是可以自動(dòng)給用戶提示信息的,如果你非要在軟件內(nèi)加入升級(jí)按鈕可以在代碼中包含本版本的版本號(hào),比如1.0,點(diǎn)升級(jí)按鈕后發(fā)送給服務(wù)器版本號(hào),服務(wù)器檢測(cè)有新版本已經(jīng)發(fā)布了,提示用戶可以升級(jí)并給用戶傳遞新版本的appstore鏈接地址,用戶確認(rèn)后由固定的訪問appstore的代碼指定要相關(guān)地址,用戶即可在appstore頁面上確認(rèn)下載。1、Objective-C的類可以多重繼承么?可以采用多個(gè)協(xié)議么?答:不可以多重繼承,可以采用多個(gè)協(xié)議。2、#

33、import和#include的區(qū)別是什么?import<> 跟 #import""有什么區(qū)別?#import能避免頭文件被重復(fù)包含的問題:1) 一般來說,導(dǎo)入objective c的頭文件時(shí)用#import,包含c/c+頭文件時(shí)用#include。使用include要注意重復(fù)引用的問題:class A,class B都引用了class C,class D若引用class A與class B,就會(huì)報(bào)重復(fù)引用的錯(cuò)誤。2)#import 確定一個(gè)文件只能被導(dǎo)入一次,這使你在遞歸包含中不會(huì)出現(xiàn)問題。所以,#import比起#include的好處就是它避免了重復(fù)引用的問

34、題。所以在OC中我們基本用的都是import。import<> 包含iOS框架類庫(kù)里的類,#import""包含項(xiàng)目里自定義的類。3、Category是什么?擴(kuò)展一個(gè)類的方式用繼承好還是類目好?為什么?答:Category是類目。用類目好,因?yàn)槔^承要滿足a is a b的關(guān)系,而類目只需要滿足a has a b的關(guān)系,局限性更小,你不用定義子類就能擴(kuò)展一個(gè)類的功能,還能將類的定義分開放在不同的源文件里, 用Category去重寫類的方法,僅對(duì)本Category有效,不會(huì)影響到其他類與原有類的關(guān)系。堆和棧的區(qū)別11、class的作用是什么?答:在頭文件中, 一般只

35、需要知道被引用的類的名稱就可以了。 不需要知道其內(nèi)部的實(shí)體變量和方法,所以在頭文件中一般使用class來聲明這個(gè)名稱是類的名稱。 而在實(shí)現(xiàn)類里面,因?yàn)闀?huì)用到這個(gè)引用類的內(nèi)部的實(shí)體變量和方法,所以需要使用#import來包含這個(gè)被引用類的頭文件。 class的作用是告訴編譯器,有這么一個(gè)類,用吧,沒有問題 class還可以解決循環(huán)依賴的問題,例如A.h導(dǎo)入了B.h,而B.h導(dǎo)入了A.h,每一個(gè)頭文件的編譯都要讓對(duì)象先編譯成功才行,使用class就可以避免這種情況的發(fā)生12、KVC是什么?KVO是什么?有什么特點(diǎn)? KVC是鍵值編碼,特點(diǎn)是通過指定表示要訪問的屬性名字的字符串標(biāo)識(shí)符,可以進(jìn)行類的屬

36、性讀取和設(shè)置??梢酝ㄟ^訪問指定的字符串標(biāo)識(shí)符,進(jìn)行類屬性的讀取和設(shè)置 KVO是鍵值觀察,特點(diǎn)是利用鍵值觀察可以注冊(cè)成為一個(gè)對(duì)象的觀察者,在該對(duì)象的某個(gè)屬性變化時(shí)收到通知13、MVC是什么?有什么特性? MVC是一種設(shè)計(jì)模式,由模型、視圖、控制器3部分組成。 模型:保存應(yīng)用程序數(shù)據(jù)的類,處理業(yè)務(wù)邏輯的類 視圖:窗口,控件和其他用戶能看到的并且能交互的元素 控制器:將模型和視圖綁定在一起,確定如何處理用戶輸入的類14、定義屬性時(shí),什么情況使用copy、assign、retain?使用assign: 對(duì)基礎(chǔ)數(shù)據(jù)類型 (NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float,doubl

37、e, char, 等等)使用copy: 希望獲得源對(duì)象的副本而不改變?cè)磳?duì)象內(nèi)容時(shí),對(duì)NSString使用retain: 希望獲得源對(duì)象的所有權(quán)時(shí),對(duì)其他NSObject和其子類15.屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?assign用于簡(jiǎn)單數(shù)據(jù)類型,如NSInteger,double,bool,retain和copy用于對(duì)象,readwrite是可讀可寫特性;需要生成getter方法和setter方法時(shí)readonly是只讀特性 只會(huì)生成getter方法 不會(huì)生成setter方法 ;不希望屬性在類外改變

38、assign是賦值特性,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);retain表示持有特性,setter方法將傳入?yún)?shù)先保留,再賦值,傳入?yún)?shù)的retaincount會(huì)+1;copy表示賦值特性,setter方法將傳入對(duì)象復(fù)制一份;需要完全一份新的變量時(shí)。nonatomic非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic 16.id 聲明的對(duì)象有什么特性?答:Id聲明的對(duì)象具有運(yùn)行時(shí)的特性,即可以指向任意類型的objcetive-c的對(duì)象; 17.Objective-C如何對(duì)內(nèi)存管理的,說說你的看法和解決

39、方法?答:Objective-C的內(nèi)存管理主要有三種方式ARC(自動(dòng)內(nèi)存計(jì)數(shù))、手動(dòng)內(nèi)存計(jì)數(shù)、內(nèi)存池。 18.內(nèi)存管理的幾條原則時(shí)什么?誰申請(qǐng),誰釋放遵循Cocoa Touch的使用原則;內(nèi)存管理主要要避免“過早釋放”和“內(nèi)存泄漏”,對(duì)于“過早釋放”需要注意property設(shè)置特性時(shí),一定要用對(duì)特性關(guān)鍵字,對(duì)于“內(nèi)存泄漏”,一定要申請(qǐng)了要負(fù)責(zé)釋放,要細(xì)心。19.哪些關(guān)鍵字生成的對(duì)象 需要手動(dòng)釋放?答:關(guān)鍵字alloc 或new 生成的對(duì)象需要手動(dòng)釋放 20在和property結(jié)合的時(shí)候怎樣有效的避免內(nèi)存泄露?答:設(shè)置正確的property屬性,對(duì)于retain需要在合適的地方釋放 21.如何對(duì)

40、iOS設(shè)備進(jìn)行性能測(cè)試?Profile-> Instruments ->Time Profiler22.Objectc的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?答:Object-c的類不可以多重繼承;可以實(shí)現(xiàn)多個(gè)接口,通過實(shí)現(xiàn)多個(gè)接口可以完成C+的多重繼承; 23.Category是什么?重寫一個(gè)類的方式用繼承好還是分類好?為什么?答:Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對(duì)本Category有效,不會(huì)影響到其他類與原有類的關(guān)系。 24.描述一下iOS SDK中如何實(shí)現(xiàn)MVC的開發(fā)模式MVC是模型、視圖、控制開發(fā)模式,對(duì)于iOS SDK,所有的

41、View都是視圖層的,它應(yīng)該獨(dú)立于模型層,由視圖控制層來控制。所有的用戶數(shù)據(jù)都是模型層,它應(yīng)該獨(dú)立于視圖。所有的ViewController都是控制層,由它負(fù)責(zé)控制視圖,訪問模型數(shù)據(jù) 25. Object C中創(chuàng)建線程的方法是什么?如果在主線程中執(zhí)行代碼,方法是什么?如果想延時(shí)執(zhí)行代碼、方法又是什么?線程創(chuàng)建有三種方法:使用NSThread創(chuàng)建、使用 GCD的dispatch、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執(zhí)行代碼,方法是 performSelectorOnMainThread,如果想延時(shí)執(zhí)行代碼可以用performSelector:

42、onThread:withObject:waitUntilDone 26、iPhone5 的屏幕分辨率大小為 1136 640 ?答:屏幕分辨率:用于量度位圖圖像內(nèi)數(shù)據(jù)量多少的一個(gè)參數(shù)。通常表示成ppi(每英寸像素Pixel per inch)。屏幕物理尺寸不變,分辨率越高,每單位面積內(nèi)包含的細(xì)節(jié)(像素點(diǎn))越多。 27、struct strA int a; float b; char c; expA; printf("%ld",sizeof(expA); 輸出結(jié)果為 12 ? 該問題涉及編譯器的“內(nèi)存對(duì)齊”問題:現(xiàn)代計(jì)算機(jī)中內(nèi)存空間都是按照byte(字節(jié))劃分的,從理論上講

43、似乎對(duì)任何類型的變量的訪問可以從任何地址開始,但實(shí)際情況是在訪問特定變量的時(shí)候經(jīng)常在特定的內(nèi)存地址訪問,這就需要各類型數(shù)據(jù)按照一定的規(guī)則在空間上排列,而不是順序的一個(gè)接一個(gè)的排放,這就是對(duì)齊。對(duì)齊的作用和原因:各個(gè)硬件平臺(tái)對(duì)存儲(chǔ)空間的處理上有很大的不同。一些平臺(tái)對(duì)某些特定類型的數(shù)據(jù)只能從某些特定地址開始存取。其他平臺(tái)可能沒有這種情況, 但是最常見的是如果不按照適合其平臺(tái)的要求對(duì)數(shù)據(jù)存放進(jìn)行對(duì)齊,會(huì)在存取效率上帶來損失。比如有些平臺(tái)每次讀都是從偶地址開始,如果一個(gè)int型(假設(shè)為 32位)如果存放在偶地址開始的地方,那么一個(gè)讀周期就可以讀出,而如果存放在奇地址開始的地方,就可能會(huì)需要2個(gè)讀周期,

44、并對(duì)兩次讀出的結(jié)果的高低 字節(jié)進(jìn)行拼湊才能得到該int數(shù)據(jù)。顯然在讀取效率上下降很多。這也是空間和時(shí)間的博弈。通常,我們寫程序的時(shí)候,不需要考慮對(duì)齊問題。編譯器會(huì)替我們選擇適合目標(biāo)平臺(tái)的對(duì)齊策略。當(dāng)然,我們也可以通知給編譯器傳遞預(yù)編譯指令而改變對(duì)指定數(shù)據(jù)的對(duì)齊方法。但是,正因?yàn)槲覀円话悴恍枰P(guān)心這個(gè)問題,所以因?yàn)榫庉嬈鲗?duì)數(shù)據(jù)存放做了對(duì)齊,而我們不了解的話,常常會(huì)對(duì)一些問題感到迷惑。最常見的就是struct數(shù)據(jù)結(jié)構(gòu)的sizeof結(jié)果,出乎意料。 對(duì)于結(jié)構(gòu)體來說,按成員中所占字節(jié)最大的是float類型,占用4個(gè)字節(jié),一共有3個(gè)成員,所以總的占用字節(jié)為:4 3 12. 可通過編譯器命令來設(shè)定: #p

45、rogma pack (2) 28、property語法中readonly/readwrite,atomic/nonatomic的作用,dynamic的作用? Property:Objective-C語言關(guān)鍵詞,與synthesize配對(duì)使用。xcode4.5以及以后的版本,synthesize可以省略。功能:讓編譯器自動(dòng)編寫一對(duì)與數(shù)據(jù)成員同名的方法聲明來省去讀寫方法的聲明。聲明property的語法為:property (參數(shù)1,參數(shù)2) 類型 名字;如:property(nonatomic,retain) UIWindow *window; 其中參數(shù)主要分為三類:讀寫屬性: (readwr

46、ite/readonly)setter語意:(assign/retain/copy)原子性: (atomicity/nonatomic) 各參數(shù)意義如下:readwrite:同時(shí)產(chǎn)生settergetter方法readonly:只產(chǎn)生簡(jiǎn)單的getter,沒有setter。 assign:默認(rèn)類型,setter方法直接賦值,而不進(jìn)行retain操作retain:setter方法對(duì)參數(shù)進(jìn)行release舊值,再retain新值。copy:setter方法進(jìn)行Copy操作,與retain一樣 atomic:原子性,它沒有一個(gè)如果你沒有對(duì)原子性進(jìn)行一個(gè)聲明(atomic or nonatomic),那

47、么系統(tǒng)會(huì)默認(rèn)你選擇的是atomic。原子性就是說一個(gè)操作不可以被中途cpu暫停然后調(diào)度, 即不能被中斷, 要不就執(zhí)行完, 要不就不執(zhí)行. 如果一個(gè)操作是原子性的,那么在多線程環(huán)境下, 就不會(huì)出現(xiàn)變量被修改等奇怪的問題。原子操作就是不可再分的操作,在多線程程序中原子操作是一個(gè)非常重要的概念,它常常用來實(shí)現(xiàn)一些同步機(jī)制,同時(shí)也是一些常見的多線程Bug的源頭。當(dāng)然,原子性的變量在執(zhí)行效率上要低些。關(guān)于異步與同步:并非同步就是不好,我們通常需要同時(shí)進(jìn)行多個(gè)操作,這時(shí)使用異步,而對(duì)于程序來說,一般就是使用多線程,然而我們很多時(shí)候需要在多個(gè)線程間訪問共享的數(shù)據(jù),這個(gè)時(shí)候又需要同步來保證數(shù)據(jù)的準(zhǔn)確性或訪問的

48、先后次序。當(dāng)有多個(gè)線程需要訪問到同一個(gè)數(shù)據(jù)時(shí),OC中,我們可以使用synchronized(變量)來對(duì)該變量進(jìn)行加鎖(加鎖的目的常常是為了同步或保證原子操作)。nonatomic:非原子性,是直接從內(nèi)存中取數(shù)值,因?yàn)樗菑膬?nèi)存中取得數(shù)據(jù),它并沒有一個(gè)加鎖的保護(hù)來用于cpu中的寄存器計(jì)算Value,它只是單純的從內(nèi)存地址中,當(dāng)前的內(nèi)存存儲(chǔ)的數(shù)據(jù)結(jié)果來進(jìn)行使用。在多線環(huán)境下可提高性能,但無法保證數(shù)據(jù)同步。 29、OSI(Open System Interconnection)開放式系統(tǒng)互聯(lián)參考模型 把網(wǎng)絡(luò)協(xié)議從邏輯上分為了7層,試列舉常見的應(yīng)用層協(xié)議。 注意問的是應(yīng)用層協(xié)議,有些同學(xué)直接答了七層模

49、型。 在開放系統(tǒng)互連(OSI)模型中的最高層,為應(yīng)用程序提供服務(wù)以保證通信,但不是進(jìn)行通信的應(yīng)用程序本身。Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程登陸服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式。它為用戶提供了在本地計(jì)算機(jī)上完成遠(yuǎn)程主機(jī)工作的能力。FTP文件傳輸協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺(tái)計(jì)算機(jī)傳送文件的協(xié)議,F(xiàn)TP是在TCP/IP網(wǎng)絡(luò)和INTERNET上最早使用的協(xié)議之一,它屬于網(wǎng)絡(luò)協(xié)議組的應(yīng)用層。 超文本傳輸協(xié)議 (HTTP-Hypertext transfer protocol) 是分布式,協(xié)作式,超媒體系統(tǒng)應(yīng)用之間的通信協(xié)議。是萬維網(wǎng)(world wide web)交換信息的基

50、礎(chǔ)。SMTP(Simple MailTransfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式,它幫助每臺(tái)計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時(shí)找到下一個(gè)目的地。時(shí)間協(xié)議(TIME protocol)是一個(gè)在RFC 868內(nèi)定義的網(wǎng)絡(luò)協(xié)議。它用作提供機(jī)器可讀的日期時(shí)間資訊。DNS 是域名系統(tǒng) (Domain NameSystem) 的縮寫,是因特網(wǎng)的一項(xiàng)核心服務(wù),它作為可以將域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù)。SNMP(Simple Network ManagementProtocol,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)的前身是簡(jiǎn)單網(wǎng)關(guān)監(jiān)控協(xié)議(SG

51、MP),用來對(duì)通信線路進(jìn)行管理。TFTP(Trivial FileTransfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個(gè)用來在客戶機(jī)與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。端口號(hào)為69。 30、網(wǎng)絡(luò)傳輸層協(xié)議中,基于TCP/IP協(xié)議和UDP/IP的連接有什么區(qū)別?TCP:TransmissionControl Protocol 傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議,由IETF的RFC 793說明(specified)。UDP 是User DatagramP

52、rotocol的簡(jiǎn)稱, 中文名是用戶數(shù)據(jù)包協(xié)議,是OSI 參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù),IETF RFC 768是UDP的正式規(guī)范。 面向連接:是指通信雙方在通信時(shí),要事先建立一條通信線路,其有三個(gè)過程:建立連接、使用連接和釋放連接。電話系統(tǒng)是一個(gè)面向連接的模式,撥號(hào)、通話、掛機(jī);TCP協(xié)議就是一種面向連接的協(xié)議。面向無連接:是指通信雙方不需要事先建立一條通信線路,而是把每個(gè)帶有目的地址的包(報(bào)文分組)送到線路上,由系統(tǒng)自主選定路線進(jìn)行傳輸。郵政系統(tǒng)是一個(gè)無連接的模式,天羅地網(wǎng)式的選擇路線,天女散花式的傳播形式;IP、UDP協(xié)議就是一種無連接協(xié)議。 3

53、1、簡(jiǎn)述MVC模式中M、V、C分別指代什么及發(fā)揮的作用?MVC開始是存在于Desktop(桌面)程序中的,M是指數(shù)據(jù)模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。 視圖是用戶看到并與之交互的界面,視圖沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是一個(gè)雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。 模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則,模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù),由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)

54、性。 控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后再確定用哪個(gè)視圖來顯示返回的數(shù)據(jù)。 32、聲明property的語法中,retain、copy、assign的含義及作用?試寫出 property中帶retain和assign關(guān)鍵字,通過synthesize自動(dòng)生成的的合成存取方法(set、get方法)的實(shí)現(xiàn)代碼。 getter分析:property (nonatomic, retain) test*aTest;property (nonatomic, copy) test*aTest;等效代碼:-(void)aTest return aTest; property (retain) test* aTest;prope

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論