80. 死鎖的4個必要條件
答:互斥萍鲸、請求保持邢疙、不可剝奪、環(huán)路
81. 死鎖的處理
答:鴕鳥策略陷舅、預防策略倒彰、避免策略、檢測與解除死鎖
82. cocoa touch框架
答:iPhone OS 應用程序的基礎 Cocoa Touch 框架重用了許多 Mac 系統(tǒng)的成熟模式莱睁,但是它更多地專注于觸摸的接口和優(yōu)化待讳。
UIKit 為您提供了在 iPhone OS 上實現(xiàn)圖形,事件驅(qū)動程序的基本工具仰剿,其建立在和 Mac OS X 中一樣的 Foundation 框架上创淡,包括文件處理,網(wǎng)絡酥馍,字符串操作等辩昆。
Cocoa Touch 具有和 iPhone 用戶接口一致的特殊設計。有了 UIKit旨袒,您可以使用 iPhone OS 上的獨特的圖形接口控件汁针,按鈕,以及全屏視圖的功能砚尽,您還可以使用加速儀和多點觸摸手勢來控制您的應用施无。
各色俱全的框架 除了UIKit 外,Cocoa Touch 包含了創(chuàng)建世界一流 iPhone 應用程序需要的所有框架必孤,從三維圖形猾骡,到專業(yè)音效,甚至提供設備訪問 API 以控制攝像頭敷搪,或通過 GPS 獲知當前位置兴想。
Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務的強大的 Objective-C 框架,也在需要時提供基礎的 C 語言 API 來直接訪問系統(tǒng)赡勘。這些框架包括:
Core Animation:通過 Core Animation嫂便,您就可以通過一個基于組合獨立圖層的簡單的編程模型來創(chuàng)建豐富的用戶體驗。
Core Audio:Core Audio 是播放闸与,處理和錄制音頻的專業(yè)技術毙替,能夠輕松為您的應用程序添加強大的音頻功能。
Core Data:提供了一個面向?qū)ο蟮臄?shù)據(jù)管理解決方案践樱,它易于使用和理解厂画,甚至可處理任何應用或大或小的數(shù)據(jù)模型。
功能列表:框架分類
下面是 Cocoa Touch 中一小部分可用的框架:
音頻和視頻:Core Audio 拷邢,OpenAL 袱院,Media Library ,AV Foundation
數(shù)據(jù)管理 :Core Data ,SQLite
圖形和動畫 :Core Animation 坑填,OpenGL ES 抛人,Quartz 2D
網(wǎng)絡:Bonjour ,WebKit 脐瑰,BSD Sockets
用戶應用:Address Book 妖枚,Core Location ,Map Kit 苍在,Store Kit
83. 自動釋放池是什么,如何工作
答:當您向一個對象發(fā)送一個autorelease消息時绝页,Cocoa就會將該對象的一個引用放入到最新的自動釋放.它仍然是個正當?shù)膶ο螅虼俗詣俞尫懦囟x的作用域內(nèi)的其它對象可以向它發(fā)送消息寂恬。當程序執(zhí)行到作用域結(jié)束的位置時续誉,自動釋放池就會被釋放,池中的所有對象也就被釋放初肉。
84. Objective-C的優(yōu)缺點酷鸦。
答:objc優(yōu)點:
1). ?Cateogies
2). ?Posing
3). 動態(tài)識別
4).指標計算
5).彈性訊息傳遞
6).不是一個過度復雜的 C 衍生語言
7).Objective-C 與 C++ 可混合編程
objc缺點:
1).不支援命名空間
2).不支持運算符重載
3).不支持多重繼承
4).使用動態(tài)運行時類型,所有的方法都是函數(shù)調(diào)用牙咏,所以很多編譯時優(yōu)化方法都用不到臼隔。(如內(nèi)聯(lián)函數(shù)等),性能低劣妄壶。
85. sprintf,strcpy,memcpy使用上有什么要注意的地方摔握。
答:
1). sprintf是格式化函數(shù)。將一段數(shù)據(jù)通過特定的格式丁寄,格式化到一個字符串緩沖區(qū)中去氨淌。sprintf格式化的函數(shù)的長度不可控,有可能格式化后的字符串會超出緩沖區(qū)的大小伊磺,造成溢出盛正。
2).strcpy是一個字符串拷貝的函數(shù),它的函數(shù)原型為strcpy(char *dst, const char *src
將src開始的一段字符串拷貝到dst開始的內(nèi)存中去屑埋,結(jié)束的標志符號為 ‘\0'豪筝,由于拷貝的長度不是由我們自己控制的,所以這個字符串拷貝很容易出錯雀彼。
3). memcpy是具備字符串拷貝功能的函數(shù)壤蚜,這是一個內(nèi)存拷貝函數(shù)即寡,它的函數(shù)原型為memcpy(char *dst, const char* src, unsigned int len);將長度為len的一段內(nèi)存徊哑,從src拷貝到dst中去,這個函數(shù)的長度可控聪富。但是會有內(nèi)存疊加的問題莺丑。
86. readwrite,readonly,assign梢莽,retain萧豆,copy,nonatomic 屬性的作用
答:@property是一個屬性訪問聲明昏名,擴號內(nèi)支持以下幾個屬性:
1).getter=getterName涮雷,setter=setterName,設置setter與 getter的方法名
2).readwrite,readonly轻局,設置可供訪問級別
2).assign洪鸭,setter方法直接賦值,不進行任何retain操作仑扑,為了解決原類型與環(huán)循引用問題
3).retain览爵,setter方法對參數(shù)進行release舊值再retain新值,所有實現(xiàn)都是這個順序(CC上有相關資料)
4).copy镇饮,setter方法進行Copy操作蜓竹,與retain處理流程一樣,先舊值release储藐,再 Copy出新的對象俱济,retainCount為1。這是為了減少對上下文的依賴而引入的機制邑茄。
5).nonatomic姨蝴,非原子性訪問,不加同步肺缕,多線程并發(fā)訪問會提高性能左医。注意,如果不加此屬性同木,則默認是兩個訪問方法都為原子型事務訪問浮梢。鎖被加到所屬對象實例級。
87. http和scoket通信的區(qū)別彤路。
答: http是客戶端用http協(xié)議進行請求秕硝,發(fā)送請求時候需要封裝http請求頭,并綁定請求的數(shù)據(jù),服務器一般有web服務器配合(當然也非絕對)菌瘫。 http請求方式為客戶端主動發(fā)起請求肩祥,服務器才能給響應,一次請求完畢后則斷開連接躯护,以節(jié)省資源。服務器不能主動給客戶端響應(除非采取http長連接 技術)丽涩。iphone主要使用類是NSUrlConnection棺滞。
scoket是客戶端跟服務器直接使用socket“套接字”進行連接裁蚁,并沒有規(guī)定連接后斷開,所以客戶端和服務器可以保持連接通道继准,雙方 都可以主動發(fā)送數(shù)據(jù)枉证。一般在游戲開發(fā)或股票開發(fā)這種要求即時性很強并且保持發(fā)送數(shù)據(jù)量比較大的場合使用。主要使用類是CFSocketRef移必。
88. TCP和UDP的區(qū)別
答: TCP全稱是Transmission Control Protocol室谚,中文名為傳輸控制協(xié)議,它可以提供可靠的崔泵、面向連接的網(wǎng)絡數(shù)據(jù)傳遞服務舞萄。傳輸控制協(xié)議主要包含下列任務和功能:
* 確保IP數(shù)據(jù)報的成功傳遞。
* 對程序發(fā)送的大塊數(shù)據(jù)進行分段和重組管削。
* 確保正確排序及按順序傳遞分段的數(shù)據(jù)倒脓。
* 通過計算校驗和,進行傳輸數(shù)據(jù)的完整性檢查含思。
TCP提供的是面向連接的崎弃、可靠的數(shù)據(jù)流傳輸,而UDP提供的是非面向連接的含潘、不可靠的數(shù)據(jù)流傳輸饲做。
簡單的說,TCP注重數(shù)據(jù)安全遏弱,而UDP數(shù)據(jù)傳輸快點盆均,但安全性一般
89. 你了解svn,cvs等版本控制工具么?
答: 版本控制 svn,cvs 是兩種版控制的器,需要配套相關的svn漱逸,cvs服務器泪姨。
scm是xcode里配置版本控制的地方。版本控制的原理就是a和b同時開發(fā)一個項目饰抒,a寫完當天的代碼之后把代碼提交給服務器肮砾,b要做的時候先從服務器得到最新版本,就可以接著做袋坑。 如果a和b都要提交給服務器仗处,并且同時修改了同一個方法,就會產(chǎn)生代碼沖突枣宫,如果a先提交婆誓,那么b提交時,服務器可以提示沖突的代碼也颤,b可以清晰的看到洋幻,并做出相應的修改或融合后再提交到服務器。
90. 什么是push歇拆。
答: 客戶端程序留下后門端口鞋屈,客戶端總是監(jiān)聽針對這個后門的請求,于是 服務器可以主動像這個端口推送消息故觅。
91. 靜態(tài)鏈接庫
答:此為.a文件厂庇,相當于java里的jar包,把一些類編譯到一個包中输吏,在不同的工程中如果導入此文件就可以使用里面的類权旷,具體使用依然是#import “ xx.h”。
92. fmmpeg框架
答: 音視頻編解碼框架贯溅,內(nèi)部使用UDP協(xié)議針對流媒體開發(fā)拄氯,內(nèi)部開辟了六個端口來接受流媒體數(shù)據(jù),完成快速接受之目的它浅。
93. fmdb框架
答:數(shù)據(jù)庫框架译柏,對sqllite的數(shù)據(jù)操作進行了封裝,使用著可把精力都放在sql語句上面姐霍。
94. 320框架
答: ui框架鄙麦,導入320工程作為框架包如同添加一個普通框架一樣。cover(open) ?flower框架 (2d 仿射技術)镊折,內(nèi)部核心類是CATransform3D.
94. 什么是沙盒模型胯府?哪些操作是屬于私有api范疇?
答:某個iphone工程進行文件操作有此工程對應的指定的位置,不能逾越恨胚。
iphone沙箱模型的有四個文件夾documents骂因,tmp,app赃泡,Library寒波,永久數(shù)據(jù)存儲一般放documents文件夾,得到模擬器的路徑的可使用NSHomeDirectory()方法升熊。Nsuserdefaults保存的文件在tmp文件夾里影所。
95. 在一個對象的方法里面:self.name= “object”;和 name =”object” 有什么不同嗎?
答:self.name =”object”:會調(diào)用對象的setName()方法僚碎;
name = “object”:會直接把object賦值給當前對象的name屬性猴娩。
96. 請簡要說明viewDidLoad和viewDidUnload何時調(diào)用
答:viewDidLoad在view從nib文件初始化時調(diào)用,loadView在controller的view為nil時調(diào)用勺阐。此方法在編程實現(xiàn)view時調(diào)用卷中,view控制器默認會注冊memory warning notification,當view controller的任何view沒有用的時候渊抽,viewDidUnload會被調(diào)用蟆豫,在這里實現(xiàn)將retain的view release,如果是retain的IBOutlet view 屬性則不要在這里release懒闷,IBOutlet會負責release 十减。
97. 簡述內(nèi)存分區(qū)情況
答:
1).代碼區(qū):存放函數(shù)二進制代碼
2).數(shù)據(jù)區(qū):系統(tǒng)運行時申請內(nèi)存并初始化栈幸,系統(tǒng)退出時由系統(tǒng)釋放。存放全局變量帮辟、靜態(tài)變量速址、常量
3).堆區(qū):通過malloc等函數(shù)或new等操作符動態(tài)申請得到,需程序員手動申請和釋放
4).棧區(qū):函數(shù)模塊內(nèi)申請由驹,函數(shù)結(jié)束時由系統(tǒng)自動釋放芍锚。存放局部變量、函數(shù)參數(shù)
98. 隊列和棧有什么區(qū)別:
答:隊列和棧是兩種不同的數(shù)據(jù)容器蔓榄。從”數(shù)據(jù)結(jié)構(gòu)”的角度看并炮,它們都是線性結(jié)構(gòu),即數(shù)據(jù)元素之間的關系相同甥郑。
隊列是一種先進先出的數(shù)據(jù)結(jié)構(gòu)逃魄,它在兩端進行操作,一端進行入隊列操作澜搅,一端進行出列隊操作嗅钻。
棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu),它只能在棧頂進行操作店展,入棧和出棧都在棧頂操作养篓。
99. HTTP協(xié)議中,POST和GET的區(qū)別是什么赂蕴?
答:
1).GET 方法
GET 方法提交數(shù)據(jù)不安全柳弄,數(shù)據(jù)置于請求行,客戶端地址欄可見;
GET 方法提交的數(shù)據(jù)大小有限
GET 方法不可以設置書簽
2).POST 方法
POST 方法提交數(shù)據(jù)安全概说,數(shù)據(jù)置于消息主體內(nèi)碧注,客戶端不可見
POST 方法提交的數(shù)據(jù)大小沒有限制
POST 方法可以設置書簽
100. ?iOS的系統(tǒng)架構(gòu)
答: iOS的系統(tǒng)架構(gòu)分為( 核心操作系統(tǒng)層 theCore OS layer )、( 核心服務層theCore Services layer )糖赔、( 媒體層 theMedia layer )和( Cocoa 界面服務層 the Cocoa Touch layer )四個層次萍丐。
101. ?控件主要響應3種事件
答:1). 基于觸摸的事件 ; ?2). 基于值的事件 ; ?3).基于編輯的事件。
102. ?xib文件的構(gòu)成分為哪3個圖標放典?都具有什么功能逝变。
答: File’s Owner 是所有 nib 文件中的每個圖標,它表示從磁盤加載 nib 文件的對象奋构;
First Responder 就是用戶當前正在與之交互的對象壳影;
View 顯示用戶界面;完成用戶交互弥臼;是 UIView 類或其子類宴咧。
103. ?簡述視圖控件器的生命周期。
答: loadView 盡管不直接調(diào)用該方法径缅,如多手動創(chuàng)建自己的視圖掺栅,那么應該覆蓋這個方法并將它們賦值給試圖控制器的 view 屬性烙肺。
viewDidLoad 只有在視圖控制器將其視圖載入到內(nèi)存之后才調(diào)用該方法,這是執(zhí)行任何其他初始化操作的入口氧卧。
viewDidUnload 當試圖控制器從內(nèi)存釋放自己的方法的時候調(diào)用桃笙,用于清楚那些可能已經(jīng)在試圖控制器中創(chuàng)建的對象。
viewVillAppear 當試圖將要添加到窗口中并且還不可見的時候或者上層視圖移出圖層后本視圖變成頂級視圖時調(diào)用該方法假抄,用于執(zhí)行諸如改變視圖方向等的操作。實現(xiàn)該方法時確保調(diào)用 [super viewWillAppear:
viewDidAppear 當視圖添加到窗口中以后或者上層視圖移出圖層后本視圖變成頂級視圖時調(diào)用丽猬,用于放置那些需要在視圖顯示后執(zhí)行的代碼宿饱。確保調(diào)用 [super viewDidAppear:] 。
104. ?動畫有基本類型有哪幾種脚祟;表視圖有哪幾種基本樣式谬以。
答:動畫有兩種基本類型:隱式動畫和顯式動畫。
105. ?實現(xiàn)簡單的表格顯示需要設置UITableView的什么屬性由桌、實現(xiàn)什么協(xié)議为黎?
答:實現(xiàn)簡單的表格顯示需要設置 UITableView 的 dataSource 和 delegate 屬性,實現(xiàn)UITableViewDataSource 和 UITableViewDelegate 協(xié)議行您。
106. ?Cocoa Touch提供了哪幾種Core Animation過渡類型铭乾?
答: Cocoa Touch 提供了 4 種 Core Animation 過渡類型,分別為:交叉淡化娃循、推擠炕檩、顯示和覆蓋。
107. ?UIView與CLayer有什么區(qū)別捌斧?
答:
1).UIView 是 iOS 系統(tǒng)中界面元素的基礎笛质,所有的界面元素都是繼承自它。它本身完全是由 CoreAnimation 來實現(xiàn)的捞蚂。它真正的繪圖部分妇押,是由一個 CALayer 類來管理。 UIView 本身更像是一個 CALayer 的管理器姓迅,訪問它的跟繪圖和跟坐標有關的屬性敲霍。
2).UIView 有個重要屬性 layer ,可以返回它的主 CALayer 實例丁存。
3).UIView 的 CALayer 類似 UIView 的子 View 樹形結(jié)構(gòu)色冀,也可以向它的 layer 上添加子layer ,來完成某些特殊的表示柱嫌。即 CALayer 層是可以嵌套的锋恬。
4).UIView 的 layer 樹形在系統(tǒng)內(nèi)部,被維護著三份 copy 编丘。分別是邏輯樹与学,這里是代碼可以操縱的彤悔;動畫樹,是一個中間層索守,系統(tǒng)就在這一層上更改屬性晕窑,進行各種渲染操作;顯示樹卵佛,其內(nèi)容就是當前正被顯示在屏幕上得內(nèi)容杨赤。
5).動畫的運作:對 UIView 的 subLayer (非主 Layer )屬性進行更改,系統(tǒng)將自動進行動畫生成截汪,動畫持續(xù)時間的缺省值似乎是 0.5 秒疾牲。
6).坐標系統(tǒng): CALayer 的坐標系統(tǒng)比 UIView 多了一個 anchorPoint 屬性,使用CGPoint 結(jié)構(gòu)表示衙解,值域是 0~1 阳柔,是個比例值。這個點是各種圖形變換的坐標原點蚓峦,同時會更改 layer 的 position 的位置舌剂,它的缺省值是 {0.5,0.5} ,即在 layer 的中央暑椰。
7).渲染:當更新層霍转,改變不能立即顯示在屏幕上。當所有的層都準備好時一汽,可以調(diào)用setNeedsDisplay 方法來重繪顯示谴忧。
8).變換:要在一個層中添加一個 3D 或仿射變換,可以分別設置層的 transform 或affineTransform 屬性角虫。
9).變形: Quartz Core 的渲染能力沾谓,使二維圖像可以被自由操縱,就好像是三維的戳鹅。圖像可以在一個三維坐標系中以任意角度被旋轉(zhuǎn)均驶,縮放和傾斜。 CATransform3D 的一套方法提供了一些魔術般的變換效果枫虏。
108. Quatrz 2D的繪圖功能的三個核心概念是什么并簡述其作用妇穴。
答:上下文:主要用于描述圖形寫入哪里;
路徑:是在圖層上繪制的內(nèi)容隶债;
狀態(tài):用于保存配置變換的值腾它、填充和輪廓, alpha 值等死讹。
109. ?iPhone OS主要提供了幾種播放音頻的方法瞒滴?
答: SystemSound Services
AVAudioPlayer 類
Audio Queue Services
OpenAL
110. ?使用AVAudioPlayer類調(diào)用哪個框架、使用步驟?
答: AVFoundation.framework
步驟:配置 AVAudioPlayer 對象妓忍;
實現(xiàn) AVAudioPlayer 類的委托方法虏两;
控制 AVAudioPlayer 類的對象;
監(jiān)控音量水平世剖;
回放進度和拖拽播放定罢。
111. ?有哪幾種手勢通知方法、寫清楚方法名旁瘫?
答:
-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;
-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;
-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;
-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;
112. ?CFSocket使用有哪幾個步驟祖凫。
答:創(chuàng)建 Socket 的上下文;創(chuàng)建 Socket 酬凳;配置要訪問的服務器信息惠况;封裝服務器信息;連接服務器粱年;
113. ?Core Foundation中提供了哪幾種操作Socket的方法售滤?
答: CFNetwork 罚拟、 CFSocket 和 BSD Socket 台诗。
114. ?解析XML文件有哪幾種方式?
答:以 DOM 方式解析 XML 文件赐俗;以 SAX 方式解析 XML 文件拉队;
115. ios 平臺怎么做數(shù)據(jù)的持久化?coredata 和sqlite有無必然聯(lián)系?coredata是一個關系型數(shù)據(jù)庫嗎阻逮?
答:iOS 中可以有四種持久化數(shù)據(jù)的方式:屬性列表(plist)粱快、對象歸檔、 SQLite3 和 Core Data叔扼; core data 可以使你以圖形界面的方式快速的定義 app 的數(shù)據(jù)模型事哭,同時在你的代碼中容易獲取到它。 coredata 提供了基礎結(jié)構(gòu)去處理常用的功能瓜富,例如保存鳍咱,恢復,撤銷和重做与柑,允許你在 app 中繼續(xù)創(chuàng)建新的任務谤辜。在使用 core data 的時候,你不用安裝額外的數(shù)據(jù)庫系統(tǒng)价捧,因為 core data 使用內(nèi)置的 sqlite 數(shù)據(jù)庫丑念。 core data 將你 app 的模型層放入到一組定義在內(nèi)存中的數(shù)據(jù)對象。 coredata 會追蹤這些對象的改變结蟋,同時可以根據(jù)需要做相反的改變脯倚,例如用戶執(zhí)行撤銷命令。當 core data 在對你 app 數(shù)據(jù)的改變進行保存的時候嵌屎, core data 會把這些數(shù)據(jù)歸檔挠将,并永久性保存胳岂。 mac os x 中sqlite 庫,它是一個輕量級功能強大的關系數(shù)據(jù)引擎舔稀,也很容易嵌入到應用程序乳丰。可以在多個平臺使用内贮, sqlite 是一個輕量級的嵌入式 sql 數(shù)據(jù)庫編程产园。與 core data 框架不同的是, sqlite 是使用程序式的夜郁, sql 的主要的 API 來直接操作數(shù)據(jù)表什燕。 Core Data 不是一個關系型數(shù)據(jù)庫,也不是關系型數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 竞端。雖然 Core Dta 支持SQLite 作為一種存儲類型屎即,但它不能使用任意的 SQLite 數(shù)據(jù)庫。 Core Data 在使用的過程種自己創(chuàng)建這個數(shù)據(jù)庫事富。 Core Data 支持對一技俐、對多的關系。
116. ?tableView 的重用機制统台?
答:UITableView 通過重用單元格來達到節(jié)省內(nèi)存的目的: 通過為每個單元格指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,以及當單元格滾出屏幕時,允許恢復單元格以便重用.對于不同種類的單元格使用不同的ID,對于簡單的表格,一個標識符就夠了.