读《苹果开发之 Cocoa 编程》(一)

最近身体出现点问题,同时对技术锐进这块的想法也出现点问题,想来想去还是先看书做笔记吧,通过记录书中的有疑问或不知道的零散点来发现自己的问题,试着改变自己的状态。

PS: 此书主要是关于 Mac 开发的!!
1、应用程序运行过程

简单的讨论下应用程序的运行过程,当进程开始运行后,首先运行一个 NSApplicationMain 函数,创建一个 NSApplication 的实例(提醒自己此处和 App 开发中的区别)。应用程序对象读取 main NIB 文件内容,将归档的对象释放出来,每个对象都发送 awakeFromNib 消息,然后应用程序对象就开始检查是否有事情发生。具体流程如下:

读《苹果开发之 Cocoa 编程》(一)_第1张图片
流程

当应用程序接收到鼠标键盘发送的事件后,窗口服务器将事件数据放到合适的应用程序事件队列中,如下图:

读《苹果开发之 Cocoa 编程》(一)_第2张图片
窗口服务器的职责

检查事件队列的过程及动作组成了整个主程序的事件循环。

PS: 当用户选择从菜单中退出时,NSApp 接收到一个消息,终止进程,应用程序的所有对象被销毁。

2、NSUndoManager

NSUndoManager 在 App 中相对来说还是用的不多,在使用 NSUndoManager 时,可以非常精确的在程序中添加撤销功能。当添加、删除对象时,撤销管理器跟踪这些撤销动作产生的消息;当撤销时,撤销管理器也将跟踪 redo 这些动作锁产生的消息。撤销机制使用 NSInvocation 对象的两个栈。

NSInvocction 就是就是将消息(包括 selector、receiver 和 所有的参数)包装成的一个对象。

- (void)forwardInvocation: (NSInvocation *)invocation;

需要清晰的了解 Go Next Two Links:

  • App Development NSUndoManager
  • NSHipster NSUndo​Manager

#######窗口和 undo 管理器
视图可以添加编辑操作到 Undo 管理器。
例如,NSTextView 就能把用户 所做的每一个修改放到 undo 管理其中。文本视图可以通过 Delegate 知道其使用的 undo 管理器:

 - (nullable NSUndoManager *)undoManagerForTextView:(NSTextView *)view;
3、自动保存文档

为支持自动保存机制, NSDocument 子类需要重载 autosavesInPlace 方法并设置为 YES, 从而实现文档的自动保存。

+  (BOOL)autosavesInPlace {
      return YES;
}

其实现在一般创建一个子类,都会默认带有这个方法的。

4、视图层次
读《苹果开发之 Cocoa 编程》(一)_第3张图片
某个例子视图层次

任何视图都应该有其子视图,但其实大多数却没有,但通常下面 5 个视图都有子视图。

  • 窗口的 Content View
  • NSBox
  • NSScrollView
  • NSSplitView
  • NSTableView

了解这五个视图之后,感觉也就对Mac 视图有了整体印象。

- (NSView *)superview;
- (NSArray *)subviews;
- (NSWindow *)window;

常用的 NSView 还是很熟悉的。。。

5、某些表格
读《苹果开发之 Cocoa 编程》(一)_第4张图片
可能支持的表示符
读《苹果开发之 Cocoa 编程》(一)_第5张图片
一些常用到的属性设置的全局变量

PS: 我看的是第四版,愕然发现这本书中好多方法都已经被放弃了.....

你可能感兴趣的:(读《苹果开发之 Cocoa 编程》(一))