原文连接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
等关键词获取入群方式。