最近身體出現(xiàn)點問題拘荡,同時對技術(shù)銳進這塊的想法也出現(xiàn)點問題胳徽,想來想去還是先看書做筆記吧伍派,通過記錄書中的有疑問或不知道的零散點來發(fā)現(xiàn)自己的問題,試著改變自己的狀態(tài)屈张。
PS: 此書主要是關(guān)于 Mac 開發(fā)的G苋ā!
1阁谆、應(yīng)用程序運行過程
簡單的討論下應(yīng)用程序的運行過程碳抄,當進程開始運行后,首先運行一個 NSApplicationMain 函數(shù)场绿,創(chuàng)建一個 NSApplication 的實例(提醒自己此處和 App 開發(fā)中的區(qū)別)剖效。應(yīng)用程序?qū)ο笞x取 main NIB 文件內(nèi)容,將歸檔的對象釋放出來裳凸,每個對象都發(fā)送 awakeFromNib 消息贱鄙,然后應(yīng)用程序?qū)ο缶烷_始檢查是否有事情發(fā)生。具體流程如下:
當應(yīng)用程序接收到鼠標鍵盤發(fā)送的事件后姨谷,窗口服務(wù)器將事件數(shù)據(jù)放到合適的應(yīng)用程序事件隊列中,如下圖:
檢查事件隊列的過程及動作組成了整個主程序的事件循環(huán)映九。
PS: 當用戶選擇從菜單中退出時梦湘,NSApp 接收到一個消息,終止進程,應(yīng)用程序的所有對象被銷毀捌议。
2哼拔、NSUndoManager
NSUndoManager 在 App 中相對來說還是用的不多,在使用 NSUndoManager 時瓣颅,可以非常精確的在程序中添加撤銷功能倦逐。當添加、刪除對象時宫补,撤銷管理器跟蹤這些撤銷動作產(chǎn)生的消息檬姥;當撤銷時,撤銷管理器也將跟蹤 redo 這些動作鎖產(chǎn)生的消息粉怕。撤銷機制使用 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崇堵、自動保存文檔
為支持自動保存機制, NSDocument 子類需要重載 autosavesInPlace 方法并設(shè)置為 YES客燕, 從而實現(xiàn)文檔的自動保存筑辨。
+ (BOOL)autosavesInPlace {
return YES;
}
其實現(xiàn)在一般創(chuàng)建一個子類,都會默認帶有這個方法的幸逆。
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)被放棄了.....