讀《蘋果開發(fā)之 Cocoa 編程》(一)

最近身體出現(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)用程序事件隊列中,如下圖:

窗口服務(wù)器的職責(zé)

檢查事件隊列的過程及動作組成了整個主程序的事件循環(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、某些表格
可能支持的表示符
一些常用到的屬性設(shè)置的全局變量

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容