iOS WebCore的wak目录

iOS的WebThread》中提到:

iOS的WebCore开源码,6.1版本的下载地址为:http://opensource.apple.com/release/ios-61/
比起webkit.org上的Mac开源码,会多了个wak目录,内有21个文件。

今天认真看了下全目录,还果然挖掘出好多信息。这21个文件的文件名,8个以WAK开头,6个以WebCoreThread开头,7个以WK开头。

一、WAK*

第一个文件WAKAppKitStubs.h里就有重大新闻,我一直的猜想都是正确的:

#ifndef NSClipView
#define NSClipView WAKClipView
#endif
#ifndef NSView
#define NSView WAKView
#endif
#ifndef NSScrollView
#define NSScrollView WAKScrollView
#endif
#ifndef WebDynamicScrollBarsView
#define WebDynamicScrollBarsView WAKScrollView
#endif
#ifndef NSWindow
#define NSWindow WAKWindow
#endif
#ifndef NSResponder
#define NSResponder WAKResponder
#endif

iOS的WebCore就是想共用Mac的代码,用WAKView来模仿NSView,这适配做好后就能同步更新了。

知道这点,其它WAK文件都好理解了,还可以看到一些枚举常量的名字都直接以NS开头,这些枚举只在Mac有,iOS需要重新声明一遍。

另外,NSView的绘图坐标是原点在左下角,UIView在左上角,这也需要做适配来进行一些变换。

特别提一下WAKWindow,它还负责绘图,有一个非常重要的成员TileCache,用于分块绘制机制中Tile的管理。

二、WebCoreThread*

WebCoreThread.h声明了一些基础的函数,包括加锁、解锁、判断线程的状态、获取RunLoop句柄等方法

WebCoreThreadInternal.h声明了启动/禁用RunLoop嵌套的函数,还有一个初始化RunQueue的函数。

WebCoreThreadMessage.h声明了WebThread和Main Thread间互发消息的函数,主要是通过NSInvocation机制。

WebCoreThreadRun.h声明了运用block(GCD)技术来同步/异步执行代码的函数。

三、WK*

WK相关的东西还不能确定其存在的根本价值,目前已知的是,WK是WAK的底层实现,例如WAKView的addSubview实际会调用WKAddSubview函数。个人感觉WK应该是适配WebKit2.framework的东西,即提供C函数的接口来操作Objective-C层的View,同时也能在C++写的WebCore里直接回调通知到各平台特有的WebView。

WKContentObservation.h声明了content changed相关的函数,主要运用在模拟mouseover消息的逻辑中。

WKUtilities.h声明了一些基础函数,用C的方式来声明类似Objective-C的函数,例如NSObject所具有的isa指针、retain和release函数。

WKView.h就更显然表明是用C函数的WKView来模仿Objective-C的WAKView了。WAKView和WKView是互相依赖的,各有成员变量保存对方,可在C++和Objective-C两种语言的代码中操作同一个功能对象。类似UIView所常用的setFrame、getBounds、convertRectToSuperview等许多函数都在这有声明C函数版的。

时间: 2024-10-28 00:03:42

iOS WebCore的wak目录的相关文章

沙盒-ios没有存储文件“保存目录”的权限,请各位大神帮忙!!!急急急!!!

问题描述 ios没有存储文件"保存目录"的权限,请各位大神帮忙!!!急急急!!! 报错内容: recorder error Error Domain=NSCocoaErrorDomain Code=513 "您没有存储文件"保存目录"的权限." UserInfo={NSFilePath=保存目录, NSUnderlyingError=0x137b61b10 {Error Domain=NSPOSIXErrorDomain Code=1 "

iOS WebCore的WebEvent和EventHandler

WebEvent是iOS专有的类,负责封装和携带从UIKit得到的系统事件信息,并由WebKit层的WAKResponder子类传递到WebCore的EventHandler. UIKit层的逻辑可参考<iOS私有API(三) UIWebView下的手势识别器gestureRecognizer>,WebKit层的相关类可参考<WebCore::Widget浅探>. 开源码中WebEvent的声明为: typedef enum { WebEventMouseDown, WebEven

UIWebView体系结构(七)WebView

在<iOS WebCore的wak目录>中证实了iOS的WebKit是想尽可能复用Mac上的代码,所以WebView在iOS和Mac上差不多. Mac WebView的参考文档: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003822 当然,

iOS学习目录

IOS开发学习索引目录:http://blog.sina.com.cn/s/blog_814ecfa90102vwlu.html ---------------每走一步------------------------- ---------------就是进步------------------------- ================整理UI总结:==================== 控件的基本使用 : http://blog.sina.com.cn/s/blog_814ecfa901

iOS的WebThread

当用到UIWebView.UITextField.UITextView等类时,就会看到WebThread线程: 在lldb中搜索 (lldb) image lookup -r -s [wW]ebThread 会有超过一百个结果. 对于普通开发者而言,WebThread最有意义的东西恐怕是UIWebView的私有API - (void)_setDrawInWebThread:(BOOL)drawInWebThread; 设置YES后,会在WebThread进行渲染的某些操作(layoutTiles

学习笔记TF066:TensorFlow移动端应用,iOS、Android系统实践

TensorFlow对Android.iOS.树莓派都提供移动端支持. 移动端应用原理.移动端.嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应:二在本地运行模型,PC训练模型,放到移动端预测.向服务端请求数据可行性差,移动端资源稀缺.本地运行实时性更好.加速计算,内存空间和速度优化.精简模型,节省内存空间,加快计算速度.加快框架执行速度,优化模型复杂度和每步计算速度. 精简模型,用更低权得精度,量化(quantization).权重剪枝(weight pru

iOS中 Realm的学习与使用 韩俊强的博客

iOS开发者交流QQ群:446310206  有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 所以重新做了一份 后面看到官网的中文文档更新不及时看着英文翻译了一点 搞的更乱了 :( 英文好的直接点右边->官方OC文档 Realm是一个移动端的数据库,Realm是SQLite和CoreData的替代者.它可以节省你成千上万行代码和数周的工作,并且让你精巧的制作出令人惊叹的用户体验. 文档版本 0.93.2在github上获取 需求

Libgdx实现跨平台热更新

游戏开发中实现热更新可以实现无须重新打包,无须发布市场,无须等待审核,只需要将更新包放到服务器上,客户端就可以直接下载更新包来实现游戏的更新,在游戏后期的维护过程中,能为开发者提供十分的便利,正所谓工欲善其事,必先利其器.这篇文章就来说说如何在Libgdx中实现游戏的热更新. 原理 要实现游戏的热更新,首先必须对编译原理有一定的了解,不用掌握技术细节,但是基本流程是必须知道的.我们知道Libgdx的开发语言是Java,Java是一种静态语言,必须先编译成字节码才能在虚拟机中执行.我们正常开发的J

WebKit的JS Binding解析

转载请注明出处:http://blog.csdn.net/horkychen WebCore与JavaScriptCore之间使用了Proxy模式,WebCore为JSC提供了一层binding层做为封装. Webkit参照W3C Web IDL(之前称为Language Bindings for DOM Specifications)描述DOM接口,但不完全相同.其完整的名称为WebKitIDL, 详细的定义可以参考下面的链接:     http://trac.webkit.org/wiki/