dispatch_async(dispatch_get_main_queue(), ^{ //需要執行的方法 }); NSOperation 方法 NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; //主隊列 NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ //需要執行的方法 }]; [mainQueue addOperation:operation]; NSThread 方法 [self performSelector:@selector(method) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES modes:nil]; [self performSelectorOnMainThread:@selector(method) withObject:nil waitUntilDone:YES]; [[NSThread mainThread] performSelector:@selector(method) withObject:nil]; RunLoop方法 [[NSRunLoop mainRunLoop] performSelector:@selector(method) withObject:nil];
1.5 如何讓計時器調用一個類方法 計時器只能調用實例方法,但是可以在這個實例方法裡面調用靜態方法。 使用計時器需要注意,計時器一定要加入RunLoop中,並且選好model才能運行。scheduledTimerWithTimeInterval方法創建一個計時器並加入到RunLoop中所以可以直接使用。 如果計時器的repeats選擇YES說明這個計時器會重復執行,一定要在合適的時機調用計時器的invalid。不能在dealloc中調用,因為一旦設置為repeats 為yes,計時器會強持有self,導致dealloc永遠不會被調用,這個類就永遠無法被釋放。比如可以在viewDidDisappear中調用,這樣當類需要被回收的時候就可以正常進入dealloc中了。 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:nil
repeats:YES]; -(void)timerMethod { //調用類方法 [[self class] staticMethod]; } -(void)invalid { [timer invalid]; timer = nil; }
1.6 如何重寫類方法 1、在子類中實現一個同基類名字一樣的靜態方法 2、在調用的時候不要使用類名調用,而是使用[self class]的方式調用。原理,用類名調用是早綁定,在編譯期綁定,用[self class]是晚綁定,在運行時決定調用哪個方法。 1.7 NSTimer創建後,會在哪個線程運行。 用scheduledTimerWithTimeInterval創建的,在哪個線程創建就會被加入哪個線程的RunLoop中就運行在哪個線程 自己創建的Timer,加入到哪個線程的RunLoop中就運行在哪個線程。 1.8 id和NSObject*的區別 id是一個 objc_object 結構體指針,定義是 typedef struct objc_object *id id可以理解為指向對象的指針。所有oc的對象 id都可以指向,編譯器不會做類型檢查,id調用任何存在的方法都不會在編譯階段報錯,當然如果這個id指向的對象沒有這個方法,該崩潰還是會崩潰的。 NSObject *指向的必須是NSObject的子類,調用的也只能是NSObjec裡面的方法否則就要做強制類型轉換。 不是所有的OC對象都是NSObject的子類,還有一些繼承自NSProxy。NSObject *可指向的類型是id的子集。 我的理解如果有錯漏請一定指出,非常感謝! 以下內容後續補充 iOS 核心框架 CoreAnimation CoreGraphics CoreLocation AVFoundation Foundation iOS核心機制 UITableView 重用 ObjC內存管理;自動釋放池,ARC如何實現 runloop runtime Block的定義、特性、內存區域、如何實現 Responder Chain NSOperation GCD 數據結構 8大排序算法 二叉樹實現 二分查找實現 面向對象編程 封裝、繼承、多態 設計模式6個原則 設計一個類的功能,如何劃分粒度(單一職責) 接口隔離。 如果有一個鳥類,有飛的動作,一個鴕鳥繼承它是合適的嗎(裡氏替換) 類之間的依賴如何依賴偶合度最小(依賴倒轉) 高層依賴低層,低層不能依賴高層。依賴接口,不能依賴具體的類。 如果A要調用C函數,但C是B的成員類,應該如何設計?(迪米特) 如何設計類,能做到只增加代碼,而不修改代碼,有哪些經驗(開放封閉) 通過設計模式解決。 計算機技術 計算機網絡: TCP/IP、HTTPCDN、SPDY 計算機安全: RSA、AES、DES 操作系統:線程、進程、堆棧、死鎖、調度算法 iOS新特性、新技術 iOS7 UIDynamic、SpritKit、新布局、扁平化 iOS8 應用程序擴展、HealthKit、SceneKit、CoreLocation、TouchID、PhotoKit iOS9 Apple Watch 第三方庫:SDWebImage、AFNetwork、JSONKit、wax swift