查漏補缺三

解釋一下 事件響應(yīng) 的過程泡一?

  蘋果注冊了一個 Source1 (基于 mach port 的) 用來接收系統(tǒng)事件婿着,其回調(diào)函數(shù)為 __IOHIDEventSystemClientQueueCallback()师抄。
  當一個硬件事件(觸摸/鎖屏/搖晃等)發(fā)生后,首先由 IOKit.framework 生成一個 IOHIDEvent 事件并由 SpringBoard 接收湖蜕。這個過程的
詳細情況可以參考這里逻卖。SpringBoard 只接收按鍵(鎖屏/靜音等),觸摸昭抒,加速评也,接近傳感器等幾種 Event,隨后用 mach port 轉(zhuǎn)發(fā)給
需要的 App 進程灭返。隨后蘋果注冊的那個 Source1 就會觸發(fā)回調(diào)盗迟,并調(diào)用 _UIApplicationHandleEventQueue() 進行應(yīng)用內(nèi)部的分發(fā)。
  _UIApplicationHandleEventQueue() 會把 IOHIDEvent 處理并包裝成 UIEvent 進行處理或分發(fā)熙含,其中包括識別 UIGesture/處理
屏幕旋轉(zhuǎn)/發(fā)送給 UIWindow 等罚缕。通常事件比如 UIButton 點擊、touchesBegin/Move/End/Cancel 事件都是在這個回調(diào)中完成的

解釋一下 手勢識別 的過程怎静?

當上面的 _UIApplicationHandleEventQueue() 識別了一個手勢時邮弹,其首先會調(diào)用 Cancel 將當前的 touchesBegin/Move/End 系列
回調(diào)打斷。隨后系統(tǒng)將對應(yīng)的 UIGestureRecognizer 標記為待處理蚓聘。

蘋果注冊了一個 Observer 監(jiān)測 BeforeWaiting (Loop即將進入休眠) 事件腌乡,這個 Observer 的回調(diào)函數(shù)是 _UIGestureRecognizerUpdateObserver(),
其內(nèi)部會獲取所有剛被標記為待處理的 GestureRecognizer或粮,并執(zhí)行GestureRecognizer 的回調(diào)导饲。

當有 UIGestureRecognizer 的變化(創(chuàng)建/銷毀/狀態(tài)改變)時,這個回調(diào)都會進行相應(yīng)處理

什么是 Mimetype ?

在瀏覽器中顯示的內(nèi)容有 HTML、有 XML渣锦、有 GIF硝岗、還有 Flash ……那么,瀏覽器是如何區(qū)分它們袋毙,決定什么內(nèi)容用什么形式來顯示呢型檀?答案是 MIME Type,也就是該資源的媒體類型听盖。

//向該文件發(fā)送請求,根據(jù)請求頭拿到該文件的MIMEType
-(NSString *)getMIMETypeURLRequestAtPath:(NSString*)path
{
    //1.確定請求路徑
    NSURL *url = [NSURL fileURLWithPath:path];
     
    //2.創(chuàng)建可變的請求對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    //3.發(fā)送請求
    NSHTTPURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
   
    NSString *mimeType = response.MIMEType;
    return mimeType;
}

大文件下載 的功能有什么注意點胀溺?

注意要邊下載數(shù)據(jù)邊寫入文件,不然會造成占用內(nèi)存空間過大

說一下 GCD 并發(fā)隊列實現(xiàn)機制皆看?

利用的時間片輪轉(zhuǎn)

多線程的 并行 和 并發(fā) 有什么區(qū)別仓坞?

并行:充分利用計算機的多核,在多個線程上同步進行 
并發(fā):在一條線程上通過快速切換腰吟,讓人感覺在同步進行

子線程是否會出現(xiàn)死鎖无埃?說一下場景?

dispatch_queue_t serialQueue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL);

dispatch_async(serialQueue, ^{
       
        dispatch_sync(serialQueue, ^{
            
            NSLog(@"deadlock");
        });
    });

在什么情況下會觸發(fā) KVO?

1.使用了KVC

使用了 `KVC`毛雇,如果有訪問器方法嫉称,則運行時會在訪問器方法中調(diào)用 `will/didChangeValueForKey:` 方法; 沒用訪問器方法灵疮,運行時會在 `setValue:forKey` 方法中調(diào)用 `will/didChangeValueForKey:`方法织阅。

2.有訪問器方法

運行時會重寫訪問器方法調(diào)用 `will/didChangeValueForKey:` 方法。 因此震捣,直接調(diào)用訪問器方法改變屬性值時荔棉,`KVO` 也能監(jiān)聽到。

3.直接調(diào)用

顯式調(diào)用 `will/didChangeValueForKey:` 方法伍派。

如何優(yōu)化 APP 的電量江耀?

程序的耗電主要在以下四個方面:
*   CPU 處理
*   定位
*   網(wǎng)絡(luò)
*   圖像
優(yōu)化的途徑主要體現(xiàn)在以下幾個方面:

盡可能降低 CPU、GPU 的功耗诉植。
盡量少用 定時器祥国。
優(yōu)化 I/O 操作。
不要頻繁寫入小數(shù)據(jù)晾腔,而是積攢到一定數(shù)量再寫入
讀寫大量的數(shù)據(jù)可以使用 Dispatch_io 舌稀,GCD 內(nèi)部已經(jīng)做了優(yōu)化。
數(shù)據(jù)量比較大時灼擂,建議使用數(shù)據(jù)庫
網(wǎng)絡(luò)方面的優(yōu)化
減少壓縮網(wǎng)絡(luò)數(shù)據(jù) (XML -> JSON -> ProtoBuf)壁查,如果可能建議使用 ProtoBuf。
如果請求的返回數(shù)據(jù)相同剔应,可以使用 NSCache 進行緩存
使用斷點續(xù)傳睡腿,避免因網(wǎng)絡(luò)失敗后要重新下載语御。
網(wǎng)絡(luò)不可用的時候,不嘗試進行網(wǎng)絡(luò)請求
長時間的網(wǎng)絡(luò)請求席怪,要提供可以取消的操作
采取批量傳輸应闯。下載視頻流的時候,盡量一大塊一大塊的進行下載挂捻,廣告可以一次下載多個
定位層面的優(yōu)化
如果只是需要快速確定用戶位置碉纺,最好用 CLLocationManager 的 requestLocation 方法。定位完成后刻撒,會自動讓定位硬件斷電
如果不是導航應(yīng)用骨田,盡量不要實時更新位置,定位完畢就關(guān)掉定位服務(wù)
盡量降低定位精度声怔,比如盡量不要使用精度最高的 kCLLocationAccuracyBest
需要后臺定位時态贤,盡量設(shè)置 pausesLocationUpdatesAutomatically 為 YES,如果用戶不太可能移動的時候系統(tǒng)會自動暫停位置更新
盡量不要使用 startMonitoringSignificantLocationChanges醋火,優(yōu)先考慮 startMonitoringForRegion:
硬件檢測優(yōu)化
用戶移動、搖晃胎撇、傾斜設(shè)備時,會產(chǎn)生動作(motion)事件晚树,這些事件由加速度計、陀螺儀爵憎、磁力計等硬件檢測。在不需要檢測的場合宝鼓,應(yīng)該及時關(guān)閉這些硬件

組件里面的圖片怎么獲取

NSBundle *currentBundle = [NSBundle bundleForClass:[self class]];
NSString *currentBundleName = currentBundle.infoDictionary[@"CFBundleName"];
NSString *imagePath = [currentBundle pathForResource:@"image@2x.png" ofType:nil inDirectory:[NSString stringWithFormat:@"%@.bundle",currentBundleName]];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

如果以后做業(yè)務(wù)組件,需要依賴我們的私有組件,可以省略本地驗證/本地驗證,只要我們的提交是成功的就行了

image.png

image.png
image.png

image.png
image.png
image.png

image.png
image.png
image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胡陪,隨后出現(xiàn)的幾起案子沥寥,更是在濱河造成了極大的恐慌,老刑警劉巖柠座,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邑雅,死亡現(xiàn)場離奇詭異,居然都是意外死亡妈经,警方通過查閱死者的電腦和手機淮野,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門捧书,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骤星,你說我怎么就攤上這事经瓷。” “怎么了妈踊?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵了嚎,是天一觀的道長。 經(jīng)常有香客問我廊营,道長歪泳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任露筒,我火速辦了婚禮呐伞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慎式。我一直安慰自己伶氢,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布瘪吏。 她就那樣靜靜地躺著癣防,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掌眠。 梳的紋絲不亂的頭發(fā)上蕾盯,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音蓝丙,去河邊找鬼级遭。 笑死,一個胖子當著我的面吹牛渺尘,可吹牛的內(nèi)容都是我干的挫鸽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸥跟,長吁一口氣:“原來是場噩夢啊……” “哼丢郊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锌雀,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蚂夕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腋逆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婿牍,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡等脂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搏屑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粉楚。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡模软,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出携狭,到底是詐尸還是另有隱情回俐,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布单默,位于F島的核電站忘瓦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜线欲,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苦锨。 院中可真熱鬧趴泌,春花似錦、人聲如沸嗜憔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慷蠕。三九已至食呻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仅胞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工影兽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峻堰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓捐名,卻偏偏與公主長得像闹击,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贺归,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容