1. Object-c的類可以多重繼承么?可以實現多個接口么?Category是什么?重寫一個類的方式用繼承好還是分類好?為什么?
答: Object-c的類不可以多重繼承;可以實現多個接口,通過實現多個接口可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關系。```
###### 2.import 跟#include 又什么區別,@class呢, #import<> 跟 #import””又什么區別?
答:#import是Objective-C導入頭文件的關鍵字,#include是C/C++導入頭文件的關鍵字,使用#import頭文件會自動只導入一次,不會重復導入,相當于#include和#pragma once;@class告訴編譯器某個類的聲明,當執行時,才去查看類的實現文件,可以解決頭文件的相互包含;#import<>用來包含系統的頭文件,#import””用來包含用戶頭文件。
###### 3. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?
1). readwrite 是可讀可寫特性;需要生成getter方法和setter方法時
2). readonly 是只讀特性 只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變
3). assign 是賦值特性,setter方法將傳入參數賦值給實例變量;僅設置變量時;
4). retain 表示持有特性,setter方法將傳入參數先保留,再賦值,傳入參數的retaincount會+1;
5). copy 表示賦值特性,setter方法將傳入對象復制一份;需要完全一份新的變量時。
6). nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic
######4.寫一個setter方法用于完成@property (nonatomic,retain)NSString *name,寫一個setter方法用于完成@property(nonatomic,copy)NSString *name
- (void)setName:(NSString *)name {
}
######5.對于語句NSString*obj = [[NSData alloc] init]; obj在編譯時和運行時分別時什么類型的對象?
答: 編譯時是NSString的類型;運行時是NSData類型的對象
######6.常見的object-c的數據類型有那些, 和C的基本數據類型有什么區別?如:NSInteger和int
答:object-c的數據類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創建后便是對象,而C語言的基本數據類型int,只是一定字節的內存空間,用于存放數值;NSInteger是基本數據類型,并不是NSNumber的子類,當然也不是NSObject的子類。NSInteger是基本數據類型Int或者Long的別名(NSInteger的定義typedef long NSInteger),它的區別在于,NSInteger會根據系統是32位還是64位來決定是本身是int還是Long。
######7.id 聲明的對象有什么特性?
答:id 聲明的對象具有運行時的特性,即可以指向任意類型的objcetive-c的對象;
######8.Objective-C如何對內存管理的,說說你的看法和解決方法?
答:Objective-C的內存管理主要有三種方式ARC(自動內存計數)、手動內存計數、內存池。
######9. 原子(atomic)跟非原子(non-atomic)屬性有什么區別?
答:
1). atomic提供多線程安全。是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤
2). non-atomic:在自己管理內存的環境中,解析的訪問器保留并自動釋放返回的值,如果指定了 nonatomic ,那么訪問器只是簡單地返回這個值。
######10. 看下面的程序,第一個NSLog會輸出什么?這時str的retainCount是多少?第二個和第三個呢? 為什么?
NSMutableArrayarray = [[NSMutableArray array]retain];
NSStringstr =[NSString stringWithFormat:@"test"];
[str retain];
[array addObject: str];
NSLog(@”%@%d”,str,[str retainCount]);
[str retain];
[str release];
[str release];
NSLog(@”%@%d”,str,[str retainCount]);
[array removeAllObjects];
NSLog(@”%@%d”,str,[str retainCount]);
答案:str的retainCount創建+1,retain+1,加入數組自動+1 3
retain+1,release-1,release-1 2
數組刪除所有對象,所有數組內的對象自動-1 1
######11. 內存管理的幾條原則時什么?按照默認法則.那些關鍵字生成的對象需要手動釋放?在和property結合的時候怎樣有效的避免內存泄露?
答:誰申請,誰釋放
遵循Cocoa Touch的使用原則;
內存管理主要要避免“過早釋放”和“內存泄漏”,對于“過早釋放”需要注意@property設置特性時,一定要用對特性關鍵字,對于“內存泄漏”,一定要申請了要負責釋放,要細心。
關鍵字alloc 或new 生成的對象需要手動釋放;
設置正確的property屬性,對于retain需要在合適的地方釋放,
######12.如何對iOS設備進行性能測試?
答: Profile-> Instruments ->Time Profiler
######13. Object C中創建線程的方法是什么?如果在主線程中執行代碼,方法是什么?如果想延時執行代碼、方法又是什么?
答:線程創建有三種方法:使用NSThread創建、使用GCD的dispatch、使用子類化的NSOperation,然后將其加入NSOperationQueue;在主線程執行代碼,方法是performSelectorOnMainThread,如果想延時執行代碼可以用performSelector:onThread:withObject:waitUntilDone:
######14. MVC設計模式是什么? 你還熟悉什么設計模式?
######15 淺復制和深復制的區別?
淺層復制:只復制指向對象的指針,而不復制引用對象本身。```
16. 類別的作用?繼承和類別在實現中有何區別?
答:category 可以在不獲悉,不改變原來代碼的情況下往里面添加新的方法,只能添加,不能刪除修改,并且如果類別和原來類中的方法產生名稱沖突,則類別將覆蓋原來的方法,因為類別具有更高的優先級
類別主要有3個作用:
1).將類的實現分散到多個不同文件或多個不同框架中。
2).創建對私有方法的前向引用。
3).向對象添加非正式協議。
繼承可以增加,修改或者刪除方法,并且可以增加屬性。
17. 類別和類擴展的區別。
答:category和extensions的不同在于 后者可以添加屬性。另外后者添加的方法是必須要實現的。
extensions可以認為是一個私有的Category。
18. oc中的協議和java中的接口概念有何不同?
19. 什么是KVO和KVC?
20. 代理的作用?
答:代理的目的是改變或傳遞控制鏈。允許一個類在某些特定時刻通知到其他類,而不需要獲取到那些類的指針。可以減少框架復雜度。
另外一點,代理可以理解為java中的回調監聽機制的一種類似
21. oc中可修改和不可以修改類型。
22. 我們說的oc是動態運行時語言是什么意思?
答:多態。 主要是將數據類型的確定由編譯時,推遲到了運行時
23. 通知和協議的不同之處?
24. 什么是推送消息?
25. 關于多態性
答:多態,子類指針可以賦值給父類。
26. 對于單例的理解
27. 說說響應鏈
28. frame和bounds有什么不同?
29. 方法和選擇器有何不同?
答:selector是一個方法的名字,method是一個組合體,包含了名字和實現.
30. OC的垃圾回收機制?
31. NSOperation queue?
32. 什么是延遲加載?
33.是否在一個視圖控制器中嵌入兩個tableview控制器?
34. 一個tableView是否可以關聯兩個不同的數據源?你會怎么處理?
35. 什么時候使用NSMutableArray,什么時候使用NSArray?
36. 給出委托方法的實例,并且說出UITableVIew的Data Source方法
37. 在應用中可以創建多少autorelease對象,是否有限制?
38. 如果我們不創建內存池,是否有內存池提供給我們?
39. 什么時候需要在程序中創建內存池?
40. 類NSObject的那些方法經常被使用?
答:NSObject是Objetive-C的基類,其由NSObject類及一系列協議構成。
其中類方法alloc、class、 description 對象方法init、dealloc、– performSelector:withObject:afterDelay:等經常被使用
41. 什么是簡便構造方法?
答:簡便構造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:
Foundation下大部分類均有簡便構造方法,我們可以通過簡便構造方法,獲得系統給我們創建好的對象,并且不需要手動釋放
42. 如何使用Xcode設計通用應用?
43. UIView的動畫效果有那些?
44. 在iPhone應用中如何保存數據?
答:有以下幾種保存機制:
1).通過web服務,保存在服務器上
2).通過NSCoder固化機制,將對象保存在文件中
3).通過SQlite或CoreData保存在文件數據庫中
45. 什么是coredata?
答:coredata是蘋果提供一套數據保存框架,其基于SQlite
46. 什么是NSManagedObject模型?
答:NSManagedObject是NSObject的子類 ,也是coredata的重要組成部分,它是一個通用的類,實現了core data 模型層所需的基本功能,用戶可通過子類化NSManagedObject,建立自己的數據模型。
47. 什么是NSManagedobjectContext?
答:NSManagedobjectContext對象負責應用和數據庫之間的交互。
48. 什么是謂詞?
答:謂詞是通過NSPredicate,是通過給定的邏輯條件作為約束條件,完成對數據的篩選。
49. 和coredata一起有哪幾種持久化存儲機制?
答:存入到文件、 存入到NSUserDefaults(系統plist文件中)、存入到Sqlite文件數據庫
50. 談談對Block 的理解?并寫出一個使用Block執行UIVew動畫?
答:Block是可以獲取其他函數局部變量的匿名函數,
其不但方便開發,并且可以大幅提高應用的執行效率(多核心CPU可直接處理Block指令)
[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
[blueViewController.view removeFromSuperview];
[self.view insertSubview:yellowViewController.view atIndex:0];
}
completion:nil }];
51. 寫出上面代碼的Block的定義。
答: typedef void(^animations)(void); typedef void(^completion)(BOOL?finished);
52. 試著使用+ beginAnimations:context:以及上述Block的定義,寫出一個可以完成
+(void)transitionWithView:(UIView*)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void(^)(void))animations?completion:(void(^)(BOOLfinished))completionNS_AVAILABLE_IOS(4_0);
操作函數的執行部分, 答案:無
53. 做過的項目是否涉及網絡訪問功能,使用什么對象完成網絡功能?
答:ASIHTTPRequest與NSURLConnection
54. 簡單介紹下NSURLConnection類及+ sendSynchronousRequest:returningResponse:error:與– initWithRequest:delegate:兩個方法的區別?
答: NSURLConnection主要用于網絡訪問,其中+ sendSynchronousRequest:returningResponse:error:是同步訪問數據,即當前線程會阻塞,并等待request的返回的response,而– initWithRequest:delegate:使用的是異步加載,當其完成網絡訪問后,會通過delegate回到主線程,并其委托的對象。
55. 多線程是什么
56. iOS 中的多線程
57. 在項目什么時候選擇使用GCD,什么時候選擇NSOperation?
答: 項目中使用NSOperation的優點是NSOperation是對線程的高度抽象,在項目中使用它,會使項目的程序結構更好,子類化NSOperation的設計思路,是具有面向對象的優點(復用、封裝),使得實現是多線程支持,而接口簡單,建議在復雜項目中使用。
項目中使用GCD的優點是GCD本身非常簡單、易用,對于不復雜的多線程操作,會節省代碼量,而Block參數的使用,會是代碼更為易讀,建議在簡單項目中使用。
58. 什么是block
答: 對于閉包(block),有很多定義,其中閉包就是能夠讀取其它函數內部變量的函數,這個定義即接近本質又較好理解。對于剛接觸Block的同學,會覺得有些繞,因為我們習慣寫這樣的程序main(){ funA();} funA(){funB();} funB(){…..}; 就是函數main調用函數A,函數A調用函數B… 函數們依次順序執行,但現實中不全是這樣的,例如項目經理M,手下有3個程序員A、B、C,當他給程序員A安排實現功能F1時,他并不等著A完成之后,再去安排B去實現F2,而是安排給A功能F1,B功能F2,C功能F3,然后可能去寫技術文檔,而當A遇到問題時,他會來找項目經理M,當B做完時,會通知M,這就是一個異步執行的例子。在這種情形下,Block便可大顯身手,因為在項目經理M,給A安排工作時,同時會告訴A若果遇到困難,如何能找到他報告問題(例如打他手機號),這就是項目經理M給A的一個回調接口,要回掉的操作,比如接到電話,百度查詢后,返回網頁內容給A,這就是一個Block,在M交待工作時,已經定義好,并且取得了F1的任務號(局部變量),卻是在當A遇到問題時,才調用執行,跨函數在項目經理M查詢百度,獲得結果后回調該block。
59. block 實現原理
60.關于block
62.談談Object-C的內存管理方式及過程?
63.Object-C有私有方法嗎?私有變量呢?
objective-c – 類里面的方法只有兩種, 靜態方法和實例方法. 這似乎就不是完整的面向對象了,按照OO的原則就是一個對象只暴露有用的東西. 如果沒有了私有方法的話, 對于一些小范圍的代碼重用就不那么順手了. 在類里面聲名一個私有方法
在Objective‐C中,所有實例變量默認都是私有的,所有實例方法默認都是公有的
64.Object-C有多繼承嗎?沒有的話用什么代替?cocoa 中所有的類都是NSObject 的子類
答: 多繼承在這里是用protocol 委托代理 來實現的
你不用去考慮繁瑣的多繼承 ,虛基類的概念.
ood的多態特性 在 obj-c 中通過委托來實現.
66. C和obj-c 如何混用
答: 1).obj-c的編譯器處理后綴為m的文件時,可以識別obj-c和c的代碼,處理mm文件可以識別obj-c,c,c++代碼,但cpp文件必須只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現obj-c的代碼,因為cpp只是cpp
2).在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是問題
3).在cpp中混用obj-c其實就是使用obj-c編寫的模塊是我們想要的。
如果模塊以類實現,那么要按照cpp class的標準寫類的定義,頭文件中不能出現obj-c的東西,包括#import cocoa的。實現文件中,即類的實現代碼中可以使用obj-c的東西,可以import,只是后綴是mm。
如果模塊以函數實現,那么頭文件要按c的格式聲明函數,實現文件中,c++函數內部可以用obj-c,但后綴還是mm或m。
總結:只要cpp文件和cpp include的文件中不包含obj-c的東西就可以用了,cpp混用obj-c的關鍵是使用接口,而不能直接使用 實現代 碼,實際上cpp混用的是obj-c編譯后的o文件,這個東西其實是無差別的,所以可以用。obj-c的編譯器支持cpp
67. Objective-C堆和棧的區別?
答: 管理方式:對于棧來講,是由編譯器自動管理,無需我們手工控制;對于堆來說,釋放工作由程序員控制,容易產生memory leak。
棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在 WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩余空間時,將提示overflow。因 此,能從棧獲得的空間較小。
堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由于系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。
碎片問題:對于堆來講,頻繁的new/delete勢必會造成內存空間的不連續,從而造成大量的碎片,使程序效率降低。對于棧來講,則不會存在這個問題,因為棧是先進后出的隊列,他們是如此的一一對應,以至于永遠都不可能有一個內存塊從棧中間彈出
分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由alloca函數進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。
分配效率:棧是機器系統提供的數據結構,計算機會在底層對棧提供支持:分配專門的寄存器存放棧的地址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是C/C++函數庫提供的,它的機制是很復雜的。
68. ViewController的didReceiveMemoryWarning怎么被調用:
答:[supper didReceiveMemoryWarning];
69.什么時候用delegate,什么時候用Notification?
答: delegate針對one-to-one關系,用于sender接受到reciever的某個功能反饋值。 notification針對one-to-one/many/none,reciver,用于通知多個object某個事件。
70.用預處理指令#define聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
#define 語法的基本知識(例如:不能以分號結束,括號的使用,等等)
懂得預處理器將為你計算常數表達式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。
意識到這個表達式將使一個16位機的整型數溢出-因此要用到長整型符號L,告訴編譯器這個常數是的長整型數。
如果你在你的表達式中用到UL(表示無符號長整型),那么你有了一個好的起點。記住,第一印象很重要。
71.寫一個”標準"宏MIN ,這個宏輸入兩個參數并返回較小的一個。
#define MIN(A,B) ((A)<(B)?A:B)
72.關鍵字const有什么含意?修飾類呢?static的作用,用于類呢?還有extern c的作用
76. 線程與進程的區別和聯系?
1). 進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性
2). 進程和線程的主要差別在于它們是不同的操作系統資源管理方式。
3). 進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。
4.)線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉。所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。
5). 但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。
87. http和scoket通信的區別。
答: http是客戶端用http協議進行請求,發送請求時候需要封裝http請求頭,并綁定請求的數據,服務器一般有web服務器配合(當然也非絕對)。 http請求方式為客戶端主動發起請求,服務器才能給響應,一次請求完畢后則斷開連接,以節省資源。服務器不能主動給客戶端響應(除非采取http長連接 技術)。iphone主要使用類是NSUrlConnection。
scoket是客戶端跟服務器直接使用socket“套接字”進行連接,并沒有規定連接后斷開,所以客戶端和服務器可以保持連接通道,雙方 都可以主動發送數據。一般在游戲開發或股票開發這種要求即時性很強并且保持發送數據量比較大的場合使用。主要使用類是CFSocketRef。
88. TCP和UDP的區別
答: TCP全稱是Transmission Control Protocol,中文名為傳輸控制協議,它可以提供可靠的、面向連接的網絡數據傳遞服務。傳輸控制協議主要包含下列任務和功能:
* 確保IP數據報的成功傳遞。
* 對程序發送的大塊數據進行分段和重組。
* 確保正確排序及按順序傳遞分段的數據。
* 通過計算校驗和,進行傳輸數據的完整性檢查。
TCP提供的是面向連接的、可靠的數據流傳輸,而UDP提供的是非面向連接的、不可靠的數據流傳輸。
簡單的說,TCP注重數據安全,而UDP數據傳輸快點,但安全性一般
89. 你了解svn,cvs等版本控制工具么?
答: 版本控制 svn,cvs 是兩種版控制的器,需要配套相關的svn,cvs服務器。
scm是xcode里配置版本控制的地方。版本控制的原理就是a和b同時開發一個項目,a寫完當天的代碼之后把代碼提交給服務器,b要做的時候先從服務器得到最新版本,就可以接著做。 如果a和b都要提交給服務器,并且同時修改了同一個方法,就會產生代碼沖突,如果a先提交,那么b提交時,服務器可以提示沖突的代碼,b可以清晰的看到,并做出相應的修改或融合后再提交到服務器。
90. 什么是push。
答: 客戶端程序留下后門端口,客戶端總是監聽針對這個后門的請求,于是 服務器可以主動像這個端口推送消息。
91. 靜態鏈接庫
答:此為.a文件,相當于java里的jar包,把一些類編譯到一個包中,在不同的工程中如果導入此文件就可以使用里面的類,具體使用依然是#import “ xx.h”。
92. fmmpeg框架
答: 音視頻編解碼框架,內部使用UDP協議針對流媒體開發,內部開辟了六個端口來接受流媒體數據,完成快速接受之目的。
fmdb框架
答:數據庫框架,對sqllite的數據操作進行了封裝,使用著可把精力都放在sql語句上面。
94. 320框架
答: ui框架,導入320工程作為框架包如同添加一個普通框架一樣。cover(open) ?flower框架 (2d 仿射技術),內部核心類是CATransform3D.
94. 什么是沙盒模型?哪些操作是屬于私有api范疇?
某個iphone工程進行文件操作有此工程對應的指定的位置,不能逾越。
phone沙箱模型的有四個文件夾documents,tmp,app,Library,永久數據存儲一般放documents文件夾,得到模擬器的路徑的可使用NSHomeDirectory()方法。Nsuserdefaults保存的文件在tmp文件夾里。
95. 在一個對象的方法里面:self.name= “object”;和 name =”object” 有什么不同嗎?
答:self.name =”object”:會調用對象的setName()方法;
name = “object”:會直接把object賦值給當前對象的name屬性。
96. 請簡要說明viewDidLoad和viewDidUnload何時調用
答:viewDidLoad在view從nib文件初始化時調用,loadView在controller的view為nil時調用。此方法在編程實現view時調用,view控制器默認會注冊memory warning notification,當view controller的任何view沒有用的時候,viewDidUnload會被調用,在這里實現將retain的view release,如果是retain的IBOutlet view 屬性則不要在這里release,IBOutlet會負責release 。
102. xib文件的構成分為哪3個圖標?都具有什么功能
答: File’s Owner 是所有 nib 文件中的每個圖標,它表示從磁盤加載 nib 文件的對象;
First Responder 就是用戶當前正在與之交互的對象;
View 顯示用戶界面;完成用戶交互;是 UIView 類或其子類。
103. 簡述視圖控件器的生命周期。
答: loadView 盡管不直接調用該方法,如多手動創建自己的視圖,那么應該覆蓋這個方法并將它們賦值給試圖控制器的 view 屬性。
viewDidLoad 只有在視圖控制器將其視圖載入到內存之后才調用該方法,這是執行任何其他初始化操作的入口。
viewDidUnload 當試圖控制器從內存釋放自己的方法的時候調用,用于清楚那些可能已經在試圖控制器中創建的對象。
viewVillAppear 當試圖將要添加到窗口中并且還不可見的時候或者上層視圖移出圖層后本視圖變成頂級視圖時調用該方法,用于執行諸如改變視圖方向等的操作。實現該方法時確保調用 [super viewWillAppear:
viewDidAppear 當視圖添加到窗口中以后或者上層視圖移出圖層后本視圖變成頂級視圖時調用,用于放置那些需要在視圖顯示后執行的代碼。確保調用 [super viewDidAppear:] 。
106. Cocoa Touch提供了哪幾種Core Animation過渡類型?
答: Cocoa Touch 提供了 4 種 Core Animation 過渡類型,分別為:交叉淡化、推擠、顯示和覆蓋
107. UIView與CLayer有什么區別?
1).UIView 是 iOS 系統中界面元素的基礎,所有的界面元素都是繼承自它。它本身完全是由 CoreAnimation 來實現的。它真正的繪圖部分,是由一個 CALayer 類來管理。 UIView 本身更像是一個 CALayer 的管理器,訪問它的跟繪圖和跟坐標有關的屬性。
2).UIView 有個重要屬性 layer ,可以返回它的主 CALayer 實例。
3).UIView 的 CALayer 類似 UIView 的子 View 樹形結構,也可以向它的 layer 上添加子layer ,來完成某些特殊的表示。即 CALayer 層是可以嵌套的。
4).UIView 的 layer 樹形在系統內部,被維護著三份 copy 。分別是邏輯樹,這里是代碼可以操縱的;動畫樹,是一個中間層,系統就在這一層上更改屬性,進行各種渲染操作;顯示樹,其內容就是當前正被顯示在屏幕上得內容。
5).動畫的運作:對 UIView 的 subLayer (非主 Layer )屬性進行更改,系統將自動進行動畫生成,動畫持續時間的缺省值似乎是 0.5 秒。
6).坐標系統: CALayer 的坐標系統比 UIView 多了一個 anchorPoint 屬性,使用CGPoint 結構表示,值域是 0~1 ,是個比例值。這個點是各種圖形變換的坐標原點,同時會更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。
7).渲染:當更新層,改變不能立即顯示在屏幕上。當所有的層都準備好時,可以調用setNeedsDisplay 方法來重繪顯示。
8).變換:要在一個層中添加一個 3D 或仿射變換,可以分別設置層的 transform 或affineTransform 屬性。
9).變形: Quartz Core 的渲染能力,使二維圖像可以被自由操縱,就好像是三維的。圖像可以在一個三維坐標系中以任意角度被旋轉,縮放和傾斜。 CATransform3D 的一套方法提供了一些魔術般的變換效果。
108. Quatrz 2D的繪圖功能的三個核心概念是什么并簡述其作用。
答:上下文:主要用于描述圖形寫入哪里;
路徑:是在圖層上繪制的內容;
狀態:用于保存配置變換的值、填充和輪廓, alpha 值等。
109. iPhone OS主要提供了幾種播放音頻的方法
答: SystemSound Services
AVAudioPlayer 類
Audio Queue Services
OpenAL
110. 使用AVAudioPlayer類調用哪個框架、使用步驟?
答: AVFoundation.framework
步驟:配置 AVAudioPlayer 對象;
實現 AVAudioPlayer 類的委托方法;
控制 AVAudioPlayer 類的對象;
監控音量水平;
回放進度和拖拽播放。
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使用有哪幾個步驟。
答:創建 Socket 的上下文;創建 Socket ;配置要訪問的服務器信息;封裝服務器信息;連接服務器;
113.Core Foundation中提供了哪幾種操作Socket的方法?
CFNetwork 、 CFSocket 和 BSD Socket
114. 解析XML文件有哪幾種方式?
答:以 DOM 方式解析 XML 文件;以 SAX 方式解析 XML 文件;
115. ios 平臺怎么做數據的持久化?coredata 和sqlite有無必然聯系?coredata是一個關系型數據庫嗎?
答:iOS 中可以有四種持久化數據的方式:屬性列表(plist)、對象歸檔、 SQLite3 和 Core Data; core data 可以使你以圖形界面的方式快速的定義 app 的數據模型,同時在你的代碼中容易獲取到它。 coredata 提供了基礎結構去處理常用的功能,例如保存,恢復,撤銷和重做,允許你在 app 中繼續創建新的任務。在使用 core data 的時候,你不用安裝額外的數據庫系統,因為 core data 使用內置的 sqlite 數據庫。 core data 將你 app 的模型層放入到一組定義在內存中的數據對象。 coredata 會追蹤這些對象的改變,同時可以根據需要做相反的改變,例如用戶執行撤銷命令。當 core data 在對你 app 數據的改變進行保存的時候, core data 會把這些數據歸檔,并永久性保存。 mac os x 中sqlite 庫,它是一個輕量級功能強大的關系數據引擎,也很容易嵌入到應用程序。可以在多個平臺使用, sqlite 是一個輕量級的嵌入式 sql 數據庫編程。與 core data 框架不同的是, sqlite 是使用程序式的, sql 的主要的 API 來直接操作數據表。 Core Data 不是一個關系型數據庫,也不是關系型數據庫管理系統 (RDBMS) 。雖然 Core Dta 支持SQLite 作為一種存儲類型,但它不能使用任意的 SQLite 數據庫。 Core Data 在使用的過程種自己創建這個數據庫。 Core Data 支持對一、對多的關系。
116. tableView 的重用機制?
答:UITableView 通過重用單元格來達到節省內存的目的: 通過為每個單元格指定一個重用標識符(reuseIdentifier),即指定了單元格的種類,以及當單元格滾出屏幕時,允許恢復單元格以便重用.對于不同種類的單元格使用不同的ID,對于簡單的表格,一個標識符就夠了.