最近身体出现点问题,同时对技术锐进这块的想法也出现点问题,想来想去还是先看书做笔记吧,通过记录书中的有疑问或不知道的零散点来发现自己的问题,试着改变自己的状态。
PS: 此书主要是关于 Mac 开发的!!
1、应用程序运行过程
简单的讨论下应用程序的运行过程,当进程开始运行后,首先运行一个 NSApplicationMain 函数,创建一个 NSApplication 的实例(提醒自己此处和 App 开发中的区别)。应用程序对象读取 main NIB 文件内容,将归档的对象释放出来,每个对象都发送 awakeFromNib 消息,然后应用程序对象就开始检查是否有事情发生。具体流程如下:
当应用程序接收到鼠标键盘发送的事件后,窗口服务器将事件数据放到合适的应用程序事件队列中,如下图:
检查事件队列的过程及动作组成了整个主程序的事件循环。
PS: 当用户选择从菜单中退出时,NSApp 接收到一个消息,终止进程,应用程序的所有对象被销毁。
2、NSUndoManager
NSUndoManager 在 App 中相对来说还是用的不多,在使用 NSUndoManager 时,可以非常精确的在程序中添加撤销功能。当添加、删除对象时,撤销管理器跟踪这些撤销动作产生的消息;当撤销时,撤销管理器也将跟踪 redo 这些动作锁产生的消息。撤销机制使用 NSInvocation 对象的两个栈。
NSInvocction 就是就是将消息(包括 selector、receiver 和 所有的参数)包装成的一个对象。
- (void)forwardInvocation: (NSInvocation *)invocation;
需要清晰的了解 Go Next Two Links:
#######窗口和 undo 管理器
视图可以添加编辑操作到 Undo 管理器。
例如,NSTextView 就能把用户 所做的每一个修改放到 undo 管理其中。文本视图可以通过 Delegate 知道其使用的 undo 管理器:
- (nullable NSUndoManager *)undoManagerForTextView:(NSTextView *)view;
3、自动保存文档
为支持自动保存机制, NSDocument 子类需要重载 autosavesInPlace 方法并设置为 YES, 从而实现文档的自动保存。
+ (BOOL)autosavesInPlace {
return YES;
}
其实现在一般创建一个子类,都会默认带有这个方法的。
4、视图层次
任何视图都应该有其子视图,但其实大多数却没有,但通常下面 5 个视图都有子视图。
- 窗口的 Content View
- NSBox
- NSScrollView
- NSSplitView
- NSTableView
了解这五个视图之后,感觉也就对Mac 视图有了整体印象。
- (NSView *)superview;
- (NSArray<NSView *> *)subviews;
- (NSWindow *)window;
常用的 NSView 还是很熟悉的。。。
5、某些表格
PS: 我看的是第四版,愕然发现这本书中好多方法都已经被放弃了.....