WKWebView 坑
- 白屏
WebContentProcessDidTerminate
回调中处理 或监听title
- cookie
- 清除缓存
- https (plist)
多个 WKWebView 共享缓存
- 核心使用
WKProcessPool
实现一个单例,之后的多个WKWebviewConfiguration
共享这个单例。 - 办法一:添加
WKUserContentController
WKProcessPool
实例,之后使用WKUserScript
来添加需要共享数据的方法 - 办法二:自己实现一个缓存管理器,使用
decidePolicyFor navigationAction
和decidePolicyFor navigationResponse
来截获请求响应之前和响应之后的回调,分别用于添加缓存和获取缓存
1 |
|
WKWebView开启缓存和清除缓存
- 缓存使用
URLRequest
的URLRequest.CachePolicy
- 清除缓存
// 如果这个也不行 可以直接把本地目录中的文件删了 /Library/Caches/WebKit/NetworkCache
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
Swift 实现可选协议的方式,如何提供默认实现
optional
- 使用
Extension
实现
单线程如何实现异步
js/dart
虽然是单线程,但宿主环境(手机,浏览器)确是多线程的,实现异步的方式主要是靠一个叫做 事件循环机制
的东西。
异步的实现大概是这样:
js class 的本质是什么,如何实现继承
class
的本质是 function
https://www.cnblogs.com/yangdaren/p/10759868.html
https://blog.csdn.net/It_sharp/article/details/87360386
flutter 如何实现并发
使用 isolate
https://www.jianshu.com/p/0aefa62372c6
注意:Future.value('str1').then(() => debugPrint('str'2))
这种情况是 str2 先输出
flutter context 的本质是什么
https://www.jianshu.com/p/509b77b26b78
atomic 一定是线程安全的吗,为什么
不一定 (主要是setter加锁) 不安全的地方 :https://stackoverflow.com/questions/12347236/which-is-threadsafe-atomic-or-non-atomic 锁一个对象 里面对他进行赋值操作会导致锁无效 http://mrpeak.cn/blog/synchronized/
atomic 的系统实现是什么,自旋锁和互斥锁,自旋锁的风险,如果用自旋锁锁住一个nil会发生什么
10以后是互斥锁 10以前是自旋锁 互斥锁和自旋锁的区别:互斥锁,在等待获得锁的时候线程会休眠,而自旋锁是一直不断尝试去获取锁。
所以优缺点在于:互斥锁需要cpu的线程调度,如果短时间内就能获得锁则不是很划算,更适合长时间等待。自旋锁则适合短时间内获得锁,如果不能获得会一直消耗cpu
kvo 的是如何实现的
两步 第一步动态创建被监听的子类改变被监听属性的setter方法。第二步,使用isa
指针混写,把原对象的isa
指针指向新的类,就可以观察到setter前后的变化