最近身體出現(xiàn)點問題,同時對技術(shù)銳進(jìn)這塊的想法也出現(xiàn)點問題,想來想去還是先看書做筆記吧,通過記錄書中的有疑問或不知道的零散點來發(fā)現(xiàn)自己的問題,試著改變自己的狀態(tài)。
PS: 此書主要是關(guān)于 Mac 開發(fā)的!!
1、應(yīng)用程序運(yùn)行過程
簡單的討論下應(yīng)用程序的運(yùn)行過程,當(dāng)進(jìn)程開始運(yùn)行后,首先運(yùn)行一個 NSApplicationMain 函數(shù),創(chuàng)建一個 NSApplication 的實例(提醒自己此處和 App 開發(fā)中的區(qū)別)。應(yīng)用程序?qū)ο笞x取 main NIB 文件內(nèi)容,將歸檔的對象釋放出來,每個對象都發(fā)送 awakeFromNib 消息,然后應(yīng)用程序?qū)ο缶烷_始檢查是否有事情發(fā)生。具體流程如下:

當(dāng)應(yīng)用程序接收到鼠標(biāo)鍵盤發(fā)送的事件后,窗口服務(wù)器將事件數(shù)據(jù)放到合適的應(yīng)用程序事件隊列中,如下圖:

檢查事件隊列的過程及動作組成了整個主程序的事件循環(huán)。
PS: 當(dāng)用戶選擇從菜單中退出時,NSApp 接收到一個消息,終止進(jìn)程,應(yīng)用程序的所有對象被銷毀。
2、NSUndoManager
NSUndoManager 在 App 中相對來說還是用的不多,在使用 NSUndoManager 時,可以非常精確的在程序中添加撤銷功能。當(dāng)添加、刪除對象時,撤銷管理器跟蹤這些撤銷動作產(chǎn)生的消息;當(dāng)撤銷時,撤銷管理器也將跟蹤 redo 這些動作鎖產(chǎn)生的消息。撤銷機(jī)制使用 NSInvocation 對象的兩個棧。
NSInvocction 就是就是將消息(包括 selector、receiver 和 所有的參數(shù))包裝成的一個對象。
- (void)forwardInvocation: (NSInvocation *)invocation;
需要清晰的了解 Go Next Two Links:
#######窗口和 undo 管理器
視圖可以添加編輯操作到 Undo 管理器。
例如,NSTextView 就能把用戶 所做的每一個修改放到 undo 管理其中。文本視圖可以通過 Delegate 知道其使用的 undo 管理器:
- (nullable NSUndoManager *)undoManagerForTextView:(NSTextView *)view;
3、自動保存文檔
為支持自動保存機(jī)制, NSDocument 子類需要重載 autosavesInPlace 方法并設(shè)置為 YES, 從而實現(xiàn)文檔的自動保存。
+ (BOOL)autosavesInPlace {
return YES;
}
其實現(xiàn)在一般創(chuàng)建一個子類,都會默認(rèn)帶有這個方法的。
4、視圖層次

任何視圖都應(yīng)該有其子視圖,但其實大多數(shù)卻沒有,但通常下面 5 個視圖都有子視圖。
- 窗口的 Content View
- NSBox
- NSScrollView
- NSSplitView
- NSTableView
了解這五個視圖之后,感覺也就對Mac 視圖有了整體印象。
- (NSView *)superview;
- (NSArray<NSView *> *)subviews;
- (NSWindow *)window;
常用的 NSView 還是很熟悉的。。。
5、某些表格


PS: 我看的是第四版,愕然發(fā)現(xiàn)這本書中好多方法都已經(jīng)被放棄了.....