原文連接html
國慶小集團隊休息了兩週,如今咱們又回來了。整裝待發,後面咱們努力爲你們帶來更多更好的文章。ios
上週公衆號發佈的如下文章:git
本期知識小集的主要內容包括:github
做者: halohilyobjective-c
有的時候,咱們會遇到一個同步方法(該方法的全部工做在返回以前已所有完成)的內部實現,須要依賴其餘異步過程的狀況。好比接口定義了一個開啓聊天會話的方法,返回值爲布爾值。從返回值類型不難推測,咱們但願這個方法返回之時,會話是否開啓成功就已經確切得知。然而,開啓會話的內部實現僅僅是向服務端發起鏈接請求,是否鏈接成功須要等待服務端的響應,顯然這是一個異步的過程。這就是一個常見的異步過程須要改造爲同步(對外表現同步)的場景。如何實現呢?能夠採用 GCD 的信號量:發起鏈接請求以前,建立一個初始值爲 0 的信號量,在方法返回以前請求該信號量(P 操做),同時,在鏈接請求的結果回調中釋放該信號量(V 操做)。這樣,發起鏈接請求後,因爲信號量初始值爲 0,會阻塞在請求信號量的地方,鏈接請求回調回來以後,釋放信號量,剛剛的信號量請求被知足,方法得以返回。這樣對外表現即爲一個同步且耗時的開啓會話操做,雖然這個場景比較彆扭,但與此相似的情景是很常見的。異步
在你們熟知的 AFNetworking 中,就有這樣的應用:函數
做者: Lefe_x工具
最近在探索能夠提升開發效率的方法,目前先從 UI 方面入手,旨在可以快速的建立 UI,避免作不斷重複的工做,現初步找到幾種方法並開始實踐,但願對你可以有啓發,若是你有更好的想法,歡迎分享給我:學習
+ (UIColor *)lef_blackColor;
原生端與 H5 端交互,比較經常使用的就是 WebViewJavascriptBridge。建橋過程這邊再也不贅述,只要下載 Github 上的 Demo 參考便可,OGitHub - marcuswestin/WebViewJavascriptBri...。字體
注意點一:Run 之後會捕捉到一個 Crash,在官網的 Demo 裏一樣會有這個 Crash,如圖一。這個 Crash 只有在用 WKWebView 裏會出現,用 UIWebView 是好的。
解決方法:在 WKWebViewJavascriptBridge.m
文件line 150 後面加一行代碼。如圖二。參考 issue :github.com/marcuswesti… 。不知爲什麼,做者沒有合併該 issue,源碼裏也未修復。所以用 cocoapods 集成庫的同窗,每次 pod install 後要檢查源碼中是否有添加上述一行代碼。
注意點二:註冊 bridge 後,與 H5 的交互沒法成功。
解決方法:檢查一下 H5 小夥伴代碼裏有沒有圖三代碼段落。這一段 js 代碼是不能改的,需原樣複製。查看源碼發現,在 WKWebViewJavascriptBridge.m
文件 line 135 方法中,[_base injectJavascriptFile]
是注入 js 文件,也是交互的關鍵。在執行這行代碼以前,有 [_base isBridgeLoadedURL:url]
這個判斷,點進去查看該判斷的實現,發現兩個宏 kCustomProtocolScheme
和 kBridgeLoaded
,分別對應 @"wvjbscheme"
和@"__BRIDGE_LOADED__"
。 這也就跟圖三代碼中的 WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
對上了。
做者: Vong_HUST
今天和你們分享一下第三方開源庫使用到的一些實用的 Clang attributes
。
圖1出自 PSPDFUIKitMainThreadGuard
————一個用於檢測是否在非主線程調用 UI 相關的工具,使用的是 __attribute__((constructor)),被該修飾符修飾的函數(僅對 C 函數生效),會在 main 函數以前執行,可是稍微比 +load 晚一點,由於 dyld 調用完 image 中全部類的 load 方法以後纔會調用 image 中的 constructor。這個修飾符支持優先級的設置,如 __attribute__((constructor(1024))),其中 1~100 爲系統保留。
下面代碼出自 YYModel,修飾符 __inline__ __attribute__((always_inline)) 意味着強制內聯,什麼意思呢?就是它看起來是一個函數,可是編譯的時候,會被編譯器優化,至關於把函數體內代碼直接插入到被調用的地方,這樣就避免掉了一些壓棧、返回等操做,加快調用。
固然系統也有不少宏是對 Clang attributes 的封裝,一些系統封裝宏代碼以下,更多例子能夠自行查看系統頭文件。
參考連接:
歡迎關注咱們的公衆號:iOS-Tips,也歡迎加入咱們的羣組討論問題。能夠公衆號留言 ios
、flutter
等關鍵詞獲取入羣方式。