NSObject官方介紹

2021-09-01 03:51:39 字數 3299 閱讀 3859

from: 

sobject協議組對所有的object-c下的objects都生效。

如果objects遵從該協議,就會被看作是first-class objects(一級類)。

另外,遵從該協議的objects的retain,release,autorelease等方法也服從objects的管理和在foundation中定義的釋放方法。一些容器中的物件也可以管理這些objects,比如

說nsarray 和nsdictionary定義的物件。

cocoa的根類也遵循該協議,所以所有繼承nsobjects的objects都有遵循該協議的特性。

nsobjects採用的協議:

nsobject

nsobject是大多數objective-c類的繼承的根類;它沒有父類。通過nsobject,其它類繼承了一些基礎的與objective-c語言編譯器系統之間的介面,並且獲得了在它的例項中表現為乙個物件的能力。

儘管nsobject不是乙個嚴格的抽象類,實際上它已經是乙個類。但是通過它自己乙個除了表現為乙個簡單類之外,nsobject實際上幾乎無法完成任 何有用的操作。為你的程式新增任何屬性(attributes)並制定實現邏輯,你必須建立乙個或者多個從nsobject繼承或者父類從 nsobject繼承的類(class)。

nsobject採用(adopts,或者說是繼承實現)了nsobject協議(protocol)(見「root class—and protocol」(第67頁) ) 。nsobject協議(protocol)允許被多個根類(root class)採用,比如nsproxy另一根類(root class),並不是從nsobject繼承,但卻也採用了nsobject協議(protocol)所以它在objective-c中便有了和nsobject類相似部分的類的定義(inte***ce)和功能。

nsobject根類,和採用了nsobject協議或者其它根類協議(「root」 protocols)一道,為所有的非**(non-proxy)cocoa物件指定了以下的定義(inte***ce)和特有的事件:

■allocation, initialization, 和 duplication。一些nsobject方法(包括一些採用的協議)用來處理建立(creation),初始化(initialization)和複製(duplication)物件。

❏alloc和allocwithzone:方法在記憶體中為乙個物件分配了記憶體空間並且設定它指向的物件的編譯器類定義(即是告訴編譯器定義了乙個類,譯者注)。

❏init方法為物件的屬性初始化(prototype),乙個讓例項變數初始化狀態的程序。類方法中的initialize和load讓乙個類有機會初始化它們自己。

❏new一種方便的結合分配記憶體和初始化的方法。

❏copy和copywithzone:方法複製任意物件的記憶體的實現方法(從nscopying協議來的);mutablecopy和mutablecopywithzone:(在nsmutablecopying協議中定義)將被應用於(mplemented by)該類來完成不定的物件拷貝(make mutable copies of their objects)。

■object retention and disposa(物件的保留和釋放)。接下來的方法對於物件導向的程式尤其的重要,那就是如何傳統的,明確的,形式化的(traditional, and explicit, form)實現記憶體管理。

❏retain方法,增加物件的計數器。

❏release方法,減少物件的計數器

❏autorelease方法,自動減少物件的計數器,但是以推遲的方式來實現。

❏retaincount方法,返回乙個物件當前的計數器

❏ dealloc方法應用於類來釋放物件例項變數並釋放動態記憶體。

■ introspection 和 comparison(反省機制和對比機制).許多nsobject方法使你能夠讓編譯器查詢乙個物件。反省方法(introspection methods)幫助你探查乙個物件在類繼承機制中的位置,決定是否實現一些方法,並測試它是否遵循一些協議。而一些類僅是有一些方法。

❏superclass和class方法(類和例項(class and instance))分別返回接收器的父類和類,作為乙個class物件。

❏ iskindofclass:和ismemberofclass:,通過這兩種方法可以確定乙個類的從屬關係。後者測試乙個接收器是否是乙個指定類的例項;而後者可以測試類的從屬關係。

❏ respondstoselector: 方法測試乙個接收器是否通過selector實現(implements)了乙個標誌符話的方法。而instancesrespondtoselector:測試了乙個給定的類例項化之後(這個訊息的接收方法為靜態方法,譯者注)是否實現了乙個指定的方法。

❏conformstoprotocol:方法,測試接收器(物件或者類)符合乙個給定的協議(protocol)。

❏ isequal: 和 hash方法,用於物件比較。

❏ description方法,允許乙個物件返回乙個字串來描述它的內容;這個常用於除錯debugging (「print  object」命令 ) 。通過「%@」以字串輸出特殊的指定物件。(即是以nslog的形式輸出,譯者注)

參見 「introspection」(頁87)以獲取更多的資訊

■ object encoding and decoding(物件的編碼和解碼).接下來的方法將與物件的編碼和解碼方式有關 (作為乙個歸檔處理的一部分):

❏encodewithcoder: 和 initwithcoder:方法,nscoding協議中僅有的組成成員。第乙個允許物件編譯它的例項變數,第二個允許乙個物件初始化它自身的解碼例項變數。

❏nsobject類宣告了一些與物件編碼相關的其它方法,有:classforcoder,replacementobjectforcoder:,和awakeafterusingcoder:。

參閱archives and serializations programming guide for cocoa來獲取更多的資訊。

■ message forwarding(訊息**). forwardinvocation:允許乙個物件把訊息**給另乙個物件。

■ message dispatch(訊息配送). 乙個以performselector...為開頭的方法允許你配送訊息(message)直到指定的延遲後,並且可以從二級執行緒((synchronously or asynchronously)同步或者不同步地)配送訊息到主線程。

nsobject擁有許多其它的方法,比如版本和傳遞的類方法(class methods for versioning and posing)(之後將為你展示如何將乙個類本身編譯為另乙個類)。它既包括了方法讓你訪問編譯器資料結構的類,比如selector方法和函式指標形式的方法實現。

NSObject 內省方法

內省 introspection 是物件導向語言和環境的乙個強大特性,objective c和cocoa在這個方面尤其的豐富。內省是物件揭示自己作為乙個執行時物件的詳細資訊的一種能力。這些詳細資訊包括物件在繼承樹上的位置,物件是否遵循特定的協議,以及是否可以響應特定的訊息。nsobject協議和類定...

NSObject的那點事

nsobject的那點事 社群會員jameshudw對nsobject類做的總結,希望對各位有所幫助。文 cocoachina社群會員jameshudw 首先我們來看一下c語言中的struct的記憶體表示 typedef struct intstruct intstruct 結構體在記憶體中的表示為...

NSObject,反射,copy筆記

一,nsobject的基本使用 nsobject的常用方法 1.判斷是夠味aclass或者aclass的子類的例項 bool iskindofclass class aclass 2.判斷是否為aclass的例項 不包括aclass的子類 bool ismenberofclass class acl...