1,NSInterger 與int的區別。php
會根據系統不一樣來指定int的長度html
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64ios
typedef long NSInteger;git
typedef unsigned long NSUInteger;github
#elseobjective-c
typedef int NSInteger;算法
typedef unsigned int NSUInteger;編程
#endif設計模式
1,線程,有幾建立方法,沒種建立方法各有什麼區別。若是我要幾個竄行的線程怎麼建立,還有並行的怎麼建立。
數組
線程優先級怎麼定義。有哪幾種優先級。
2,iOS平臺有些什麼事件。
答:重力加速度事件,搖動事件,指南針事件,touch事件。
3,iOS touch 事件的原理,以及是怎麼再view 中傳遞的。
iOS的事件分發
2014-01-26 我來講兩句 來源:sakulafly的專欄
移動平臺上的開發主要關注數據以及數據的處理,事件的處理以及UI。因此事件的分發處理是很重要的一個環節,對於一個平臺的優劣來講也是一項重要的參數。若是事件的分發設計的很差,一些複雜的UI場景就會變得很難寫甚至無法寫。從小屏沒有觸摸的功能機開始到如今大屏多點觸摸的智能機,對於事件的分發處理基本思路都是同樣的——鏈(設計模式中有個模式就是職責鏈chain of responsibility),只是斷定的複雜程度不一樣。
iOS中的事件有3類,觸摸事件(單點,多點,手勢)、傳感器事件(加速度傳感器)和遠程控制事件,這裏我介紹的是第一種事件的分發處理。
上面的這張圖來自蘋果的官方。描述了Responder的鏈,同時也是事件處理的順序。經過這兩張圖,咱們能夠發現:
1. 事件順着responder chain傳遞,若是一環不處理,則傳遞到下一環,若是都沒有處理,最後回到UIApplication,再不處理就會拋棄
2. view的下一級是包含它的viewController,若是沒有viewController則是它的superView
3. viewController的下一級是它的view的superView
4. view以後是window,最後傳給application,這點iOS會比OS X簡單(application就一個,window也一個)
總結出來傳遞規則是這樣的:< 喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgICA8aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140126/2014012608582353.png" alt="\">
這樣事件就會從first responder逐級傳遞過來,直到被處理或者被拋棄。
因爲UI的複雜,這個responder chain是須要根據事件來計算的。好比,我如今在一個view內加入了2個Button,先點擊了一個,則first responder確定是這個點擊過的button,但我下面能夠去點擊另外一個button,因此顯然,當觸摸事件來時,這個chain是須要從新計算更新的,這個計算的順序是事件分發的順序,基本上是分發的反過來。
不管是哪一種事件,都是系統自己先得到,是iOS系統來傳給UIApplication的,由Application再決定交給誰去處理,因此若是咱們要攔截事件,能夠在UIApplication層面或者UIWindow層面去攔截。
UIView是如何斷定這個事件是不是本身應該處理的呢?iOS系統檢測到一個觸摸操做時會打包一個UIEvent對象,並放入Application的隊列,Application從隊列中取出事件後交給UIWindow來處理,UIWindow會使用hitTest:withEvent:方法來遞歸的尋找操做初始點所在的view,這個過程成爲hit-test view。
hitTest:withEvent:方法的處理流程以下:調用當前view的pointInside:withEvent:方法來斷定觸摸點是否在當前view內部,若是返回NO,則hitTest:withEvent:返回nil;若是返回YES,則向當前view內的subViews發送hitTest:withEvent:消息,全部subView的遍歷順序是從數組的末尾向前遍歷,直到有subView返回非空對象或遍歷完成。若是有subView返回非空對象,hitTest方法會返回這個對象,若是每一個subView返回都是nil,則返回本身。
好了,咱們仍是看個例子:
這裏ViewA包含ViewB和ViewC,ViewC中繼續包含ViewD和ViewE。假設咱們點擊了viewE區域,則hit-test View斷定過程以下:
1. 觸摸在A內部,因此須要檢查B和C
2. 觸摸不在B內部,在C內部,因此須要檢查D和E
3. 觸摸不在D內部,但在E內部,因爲E已是葉子了,因此斷定到此結束
咱們能夠運行一段代碼來驗證,首先從UIView繼承一個類myView,重寫裏面的
1
2
3
4
5
6
7
8
9
10
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *retView = nil;
NSLog(@
"hitTest %@ Entry! event=%@"
, self.name, event);
retView = [
super
hitTest:point withEvent:event];
NSLog(@
"hitTest %@ Exit! view = %@"
, self.name, retView);
return
retView;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
BOOL ret = [
super
pointInside:point withEvent:event];
// if ([self.name isEqualToString:@"viewD"]) {
// ret = YES;
// }
if
(ret) {
NSLog(@
"pointInside %@ = YES"
, self.name);
}
else
{
NSLog(@
"pointInside %@ = NO"
, self.name);
}
return
ret;
}
|
4,全局變量,和局部變量再內存佔用上有什麼區別。
答:http://wenku.baidu.com/link?url=M8NYcU7hpeGOBOX5eAv6PlesQGa_LdXfdB1Nfp5B8vUj1zk6voSW_JGR6GYtecDdBSoItFtasOGTIpTqc6mIeaP4-J9nX7Pz5NEN6bFSN5a
5,局部變量最大能申請多大的內存,爲何會最大隻能這麼大內存。
答:iOS平臺 最大 能申請279M 的內存 Iphone4S 平臺測試 long *test = malloc(1024*1024*280);
6,二分查找函數的實現。
二分查找又稱折半查找,優勢是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。所以,折半查找方法適用於不常常變更而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,若是二者相等,則查找成功;不然利用中間位置記錄將表分紅前、後兩個子表,若是中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,不然進一步查找後一子表。重複以上過程,直到找到知足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。
答:假設其數組長度爲n,其算法複雜度爲o(log(n))
下面提供一段二分查找實現的僞代碼:
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max
7,view 中動畫屬性有哪些。
8,ios 中bound 和view 有什麼區別。
答;見後面的一遍博文。
9,局部變量和全局變量有什麼區別。
答:http://wenku.baidu.com/link?url=ZMY4_Uisy4wyZKa320dmVBiKBUzmWabAasGqw_UFKTfyKvd6JCQwplTpm3Os4hVUeKlfov9Lcpuj5BeRiAUeG23JCDpeiTrPNqp7rpv1C0i
10,什麼是delegate,他與通知有什麼區別,怎麼才能產生循環引用,爲何會產生循環應用。
全部的引用計數系統,都存在循環應用的問題。例以下面的引用關係:
答:
• 對象a建立並引用到了對象b.
• 對象b建立並引用到了對象c.
• 對象c建立並引用到了對象b.
這時候b和c的引用計數分別是2和1。當a再也不使用b,調用release釋放對b的全部權,由於c還引用了b,因此b的引用計數爲1,b不會被釋放。b不釋放,c的引用計數就是1,c也不會被釋放。今後,b和c永遠留在內存中。
這種狀況,必須打斷循環引用,經過其餘規則來維護引用關係。好比,咱們常見的delegate每每是assign方式的屬性而不是retain方式 的屬性,賦值不會增長引用計數,就是爲了防止delegation兩端產生沒必要要的循環引用。若是一個UITableViewController 對象a經過retain獲取了UITableView對象b的全部權,這個UITableView對象b的delegate又是a, 若是這個delegate是retain方式的,那基本上就沒有機會釋放這兩個對象了。本身在設計使用delegate模式時,也要注意這點。
由於循環引用而產生的內存泄露也是Instrument沒法發現的,因此要特別當心。
11,當你有一個bug須要處理,然而又有一個商務會議要開怎麼處理
12,ios程序有幾種狀態。
答:前臺,後臺,僞後臺。從後臺關閉。
13,ios 程序controller view 顯示的流程。
答:
step1:initWithNib viewController 會進行alloc,並init.
step2: loadView 在這裏會看它的子類是否有重寫這個函數,若是重寫了則調用子類的,不然就調用她本身的。注意,這個時 候視圖仍是沒有沒加載進來的哦。
step3:viewDidLoad 這個時候視圖已經存在了。能夠在這裏添加你想要添加的UI控件了。
step4:viewWillAppear 視圖將出如今屏幕上了
step5:viewDidAppear 視圖已經成功在屏幕上渲染完成了
step6:viewWillDisappear 視圖將要消失了
step7:viewDidDisappear 視圖從屏幕上消失了
step8:viewDidUnLoad
14,KVO KVC概念
15,runtime 具體怎麼用。Runtime編程。
16,通常用到什麼開源的動畫框架。
17,通常瀏覽什麼樣的國外網站。技術網站。
答:
2012-05-19 17:54:47| 分類: iOS開發|舉報|字號 訂閱
如今愈來愈多的開發者參與到了,或正在加入iOS等移動操做系統平臺的應用開發行列中來了,iOS和Android是目前很火的開發領域。在營收方面跟Android相比iOS目前的情況更爲可觀。iOS相關的培訓和教程也愈來愈多。相信國外的英文站對不少英語基礎好的朋友頗有吸引力,一定國外的資源更及時而且更前沿。好的iOS資源學習和工具站會爲咱們的開發和學習頗有幫助。本文介紹了收集到的5個iOS海外學習資源站推薦給你們。
?5個iOS應用開發者海外學習資源站推薦
1. Snipplr
Snipplr是個不錯的代碼學習倉庫。Snipplr上面有大量的iOS演示代碼,有用的框架,組件和完整的開源代碼案例。有時當咱們在實現一個功能的時候,在寫Object C代碼要花很多時間和精力。若是想偷懶,能夠到Snipplr上去搜索一下看有沒有相似的完整代碼。它搜索的結果都是站外的連接,若是運氣好的話,只須要把代碼複製出來修改自定義一下不是很省時省力麼。
2. ShareKit
ShareKit是一種分享組件,它可能很好地整合到你的應用中。根據個人經驗我以爲建立和配置社交網絡的賬號和API要比將代碼整合到應用中花的時間要長。因此若是你的應用須要分享功能而且是海外用戶羣ShareKit是很不錯的iOS社交分享插件,它可以很容易地被整合到應用中,而且從他那裏能夠了解到目前社交網絡中什麼事物最火,如何將他們整合到應用中。
3. InAppsSettingsKit
應用中的設置(配置)功能是全部手機等移動開發者都沒法逃避的工做。若是你想從一開始就將這些工做量減到最低的話,你能夠嘗試瞭解一下InAppsSettingsKit的內容。
4. GitHub的Objective-C頁面
GitHub在海外有上百萬的用戶用它來進行代碼分享和協做。儘管Objective C在GitHub上只佔到2%左右的內容,可是它的Objective C頁面仍然是iOS開發者的豐富代碼寶藏庫。在這裏你能夠找到知名的和利用普遍的函數庫和Framework等。
5. CocoaDev
CocoaDev也是一個很是優秀的關於iOS開發技能的資源學習網站。它提供了很是豐富和完整的iOS開發信息和iOS開發。
18,NSArray 和NSset遍歷哪一個速度更快,爲何?
答: NSSet到底什麼類型,其實它和NSArray功能性質同樣,用於存儲對象,屬於集合; NSSet , NSMutableSet類聲明編程接口對象,無序的集合,在內存中存儲方式是不連續的,不像NSArray,NSDictionary(都是有序的集合)類聲明編程接口對象是有序集合,在內存中存儲位置是連續的;
NSSet和咱們經常使用NSArry區別是:在搜索一個一個元素時NSSet比NSArray效率高,主要是它用到了一個算法hash(散列,也可直譯爲哈希);開發文檔中這樣解釋:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower than with sets.
好比你要存儲元素A,一個hash算法直接就能直接找到A應該存儲的位置;一樣,當你要訪問A時,一個hash過程就能找到A存儲的位置。而對於NSArray,若想知道A到底在不在數組中,則須要便利整個數組,顯然效率較低了;
NSSet,NSArray都是類,只能添加cocoa對象,若是須要加入基本數據類型(int,float,BOOL,double等),須要將數據封裝成NSNumber類型。