
前言(汇报近期状况)
近段时间由于公司的
开发业务整合,我领到了一个兼职维护Android项目的机会,于是花了些时间把安卓基础的知识过了一遍,顺带还熟悉了一下Java语言,收获非浅,填补了技术栈的一个空白, 同时出于业务对跨平台的明显需求, 额外利用时间研究了ReactNative,算是迈出了面向全栈的一小步.这其中的体验就是:进步使人愉悦, 由于这些工作上的原因,原本已经准备的好一部分macOS 开发的进阶项目也因此耽搁了进度, 后面会抓紧时间再补上来,希望有兴趣的朋友们不要着急,我会定期更新进度,希望可以做的更好.关于macOS 开发基础教程视频课程已经发布有
差不多两个月的时间了,收到部分同学的反馈和提问,十分感谢.后期的进阶课程计划对已经收看基础课程的同学进行免费授权,目前还不清楚网易平台是否支持这个功能,如果有朋友或同学了解,烦请简信我,先提前致谢了.
正文(macOS 开发基础小知识)
1. macOS App 的启动过程:
通过熟悉一个App的启动过程,有利于我们理解开发时代码的执行过程,以及帮助我们修复一些系统Bug都是非常有意义的.一个macOS的App启动与iOS App启动相似,大体上可以将整个过程分为两部分:
-
- 准备过程:
- 当我们通过
点击图标启动一个App应用程序时,系统做的第一件事情就是打开info.plist文件, 从中获知编译后的二进制文件位于什么地方,并启动它我们的编写的代码此后便处于App的控制机制下.
info.plist文件提供了对应用程序的基本描述:- 应用的图标
- 应用的类型(仅macOS)
- 应用程序的可执行二进制文件名称
- 启动应用时加载的界面文件
- 应用程序支持打开的文档类型
info.plist 文件非常重要,如果从应用程序中删除这个文件,会导致App无法启动.
- 2.运行过程:
系统运行的第一件事就是打开主storyboard(Xcode7以前的版本是打开nib文件),并反序列化其中的内容,也就是说会对Storyboard文件(Xcode7前的工程是nib文件)中的控件,窗口以及其他对象进行解包,并将它们链接到一起.
链接对象的时候系统会调用ld和dyld来进行静态和动态的加载需求库.
同时,系统会给应用创建一个AppDelegate对象和事件循环(runloop),并在完成资源和库加载后,会给AppDelegate发送一个applicationDidFinishLaunching消息.
从此刻起,应用就在我们的代码控制之下了~
2. NSView的layer说明:
在macOS中,NSView由于历史原因,并不像iOS中的UIView一样天然的就带有一个layer图层,这在NSView的使用时,会造成有时通过layer.backgroundColor来设置背景色无效.(在课程的视频里有相关的讲解).
如果希望NSView可以正常使用layer图层,仅仅需要设置wantsLayer 属性为YES(Swift中是true)即可.
通常情况下,从storyboard(或Xib)中拖拽的控件,wantsLayer是默认为YES的.
如果通过代码创建的控件,那么在被addSubview方法添加到父控件之前,wantsLayer是默认为NO.
尾声(碎碎念)
意外的鼓励:
在基础课程发布后,收到有的同学因为学习视频课程内容后并因此获得了工作的实习机会,这确是出乎我原本的意料,也特别高兴能帮助到同学们,希望努力的人都可以过得美好!