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

下載本文檔

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

文檔簡介

1、頁碼:43/43面試題筆記注意事項:內(nèi)存管理、多線程、核心動畫、表重用,推送,數(shù)據(jù)持久化。前程無憂、智聯(lián)招聘。1.編程題 寫一個View 從屏幕頂端動畫移動到底部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.寫一個內(nèi)聯(lián)函數(shù),將字符串“#ff3344”換成相應(yīng)的UIColor對象- (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.寫一個取當(dāng)前日期的方法,輸入字符串,格式如下2010-02-19/獲取當(dāng)前時間 NSDate * nowDate = NSDate dat

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

7、法。 對象:類的實例化和具體化 實例方法:主要和類方法區(qū)別,類方法聲明時前面用加號,實例方法聲明時用減號 實例成員:主要和類成員區(qū)分,類成員加static,實例成員不需要。6.、類名、方法名、成員名、函數(shù)名、宏定義首字母哪些大寫,哪些小寫 大寫:類名,宏定義 小寫:方法名,成員名,函數(shù)名 7.public,protected,private區(qū)別 public:完全公開,在程序的任何地方都可以調(diào)用 private:和public相反,只能在該類內(nèi)部調(diào)用 protected:只有自己和自己的子類可以調(diào)用 8.如何聲明一個帶兩個參數(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就是實例本身,在類里用self來調(diào)用自身的方法 12.什么時候使用繼承?什么時候使用類別 給一個類增加新的數(shù)據(jù)成員時用繼承,只是想擴展類的方法或覆蓋原來的方法時用類別 13.如何聲明一個類 class Example或者 interface Example end 14.寫出12

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

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

12、19.文件處理用哪些類(寫12個) NSFileManagerNSUserDefaults open, fopen20.解釋retain、copy、assgin、autorelease retain,copy:計數(shù)器加一,區(qū)別是retain是原對象計數(shù)器加一,copy是創(chuàng)建一個新對象后,新對象計數(shù)器加一 assgin:簡單復(fù)制,計數(shù)器不變 autorelease:內(nèi)存延遲釋放,計數(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請求第三方包各寫出一個 xml:kissxml json:SBJSon http請求:ASIHttpRequest SDWebImage, 異步圖片加載器(界面流暢)異步mp3 異步video24.代理和通知的區(qū)別 代理是垂直的,通知可以平行的 25.寫出幾個常用的設(shè)計模式(兩個以上) MVC設(shè)計模式 單例模式 代理模式 通知模式 工廠模式26.新的關(guān)鍵字:class 類名;解決循環(huán)引用問題,提高性能class僅僅告訴編譯器,在進行編譯的時候把后面的名字作為一個類來處理。(1)class的作用:聲明一個類,告訴編譯器某個名稱是一個類(2

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

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

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

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

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

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

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

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

22、可以方便的擴展類,甚至系統(tǒng)類都可以輕易擴展,維護了代碼原本的結(jié)構(gòu)不受影響。3 、類別可以寫到不同的.h或.m文件中,可以分散代碼到跟類別的擴展功能相關(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、即時刷新ui控件的時候,經(jīng)常使用。38.你說你做過iphone閱讀器,如果要讀取一個文本文件,請問你是如何處理編碼問題的?另外像pdf格式的文件,你如何讀取。iphone手機閱讀器中對于PDF格式的閱讀,可以直接用UIWebView控件顯示,也可以從網(wǎng)上下到很多直接讀取pdf格式的代碼直接從pdf中得到數(shù)據(jù)。Xcode4.1之后系統(tǒng)框架有所拓展。39.復(fù)雜表格動畫 -(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ā)大型項目的時候,如何進行內(nèi)存泄露檢測的。 可以通過xcode的自帶工具run-start with performance tool里有instruments下有個leaks工具,啟動此工具

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

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

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

28、etain和release配對3,管理好自動釋放對象,用的時候加retain, 用完后release4,自動釋放池使用原則, 借鑒for循環(huán)1萬次不停創(chuàng)建自動釋放的對象的處理方式。-(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支持,可以用于檢測異常,跟java的的try-catch的區(qū)別是多了個.問,你平時是如何學(xué)習(xí)iphone的,常去哪些外國網(wǎng)站。 (自己查)問,如果網(wǎng)絡(luò)出現(xiàn)問題,你連接通信的時候如何處理? 用NSError 判斷,如果不為空,則說明網(wǎng)絡(luò)開始連接就出現(xiàn)問題了。 如果是連接中出現(xiàn)了問題,則自動調(diào)用NSUrlConnection的錯誤處理的委托方法(最好記住方法是什么)。問,進度條在進度過程中如何過一會改變進度條的填充顏色

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

45、rogma pack (2) 28、property語法中readonly/readwrite,atomic/nonatomic的作用,dynamic的作用? Property:Objective-C語言關(guān)鍵詞,與synthesize配對使用。xcode4.5以及以后的版本,synthesize可以省略。功能:讓編譯器自動編寫一對與數(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:同時產(chǎn)生settergetter方法readonly:只產(chǎn)生簡單的getter,沒有setter。 assign:默認類型,setter方法直接賦值,而不進行retain操作retain:setter方法對參數(shù)進行release舊值,再retain新值。copy:setter方法進行Copy操作,與retain一樣 atomic:原子性,它沒有一個如果你沒有對原子性進行一個聲明(atomic or nonatomic),那

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

48、先后次序。當(dāng)有多個線程需要訪問到同一個數(shù)據(jù)時,OC中,我們可以使用synchronized(變量)來對該變量進行加鎖(加鎖的目的常常是為了同步或保證原子操作)。nonatomic:非原子性,是直接從內(nèi)存中取數(shù)值,因為它是從內(nèi)存中取得數(shù)據(jù),它并沒有一個加鎖的保護來用于cpu中的寄存器計算Value,它只是單純的從內(nèi)存地址中,當(dāng)前的內(nèi)存存儲的數(shù)據(jù)結(jié)果來進行使用。在多線環(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ù)以保證通信,但不是進行通信的應(yīng)用程序本身。Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠程登陸服務(wù)的標(biāo)準協(xié)議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。FTP文件傳輸協(xié)議是TCP/IP網(wǎng)絡(luò)上兩臺計算機傳送文件的協(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)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式,它幫助每臺計算機在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。時間協(xié)議(TIME protocol)是一個在RFC 868內(nèi)定義的網(wǎng)絡(luò)協(xié)議。它用作提供機器可讀的日期時間資訊。DNS 是域名系統(tǒng) (Domain NameSystem) 的縮寫,是因特網(wǎng)的一項核心服務(wù),它作為可以將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫。SNMP(Simple Network ManagementProtocol,簡單網(wǎng)絡(luò)管理協(xié)議)的前身是簡單網(wǎng)關(guān)監(jiān)控協(xié)議(SG

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

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

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

54、性。 控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構(gòu)件去處理請求,然后再確定用哪個視圖來顯示返回的數(shù)據(jù)。 32、聲明property的語法中,retain、copy、assign的含義及作用?試寫出 property中帶retain和assign關(guān)鍵字,通過synthesize自動生成的的合成存取方法(set、get方法)的實現(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論