iOS技術(shù)文檔No.14 AppKit_NSObject

這個東西實在太多了,因為他是OC中所有類的根類,沒有父類,這里只能簡單的說一下,其他簡單的自定義相信大家都會。
NSObject是大多數(shù)Objective-C類的繼承的根類;它沒有父類。通過NSObject,其它類繼承了一些基礎(chǔ)的與Objective-C語言編譯器系統(tǒng)之間的接口,并且獲得了在它的實例中表現(xiàn)為一個對象的能力。以下是NSObject類的繼承圖:

繼承關(guān)系.png

盡管NSObject不是一個嚴格的抽象類,實際上它已經(jīng)是一個類。但是通過它自己一個除了表現(xiàn)為一個簡單類之外,NSObject實際上幾乎無法完成任何有用的操作。為你的程序添加任何屬性(attributes)并制定實現(xiàn)邏輯,你必須創(chuàng)建一個或者多個從NSObject繼承或者父類從NSObject繼承的類(class)。

NSObject采用(adopts,或者說是繼承實現(xiàn))了NSObject協(xié)議(protocol)。NSObject協(xié)議(protocol)允許被多個根類(root class)采用,比如NSProxy另一根類(root class),并不是從NSObject繼承,但卻也采用了NSObject協(xié)議(protocol)所以它在Objective-C中便有了和NSObject類相似部分的類的定義(interface)和功能。

NSObject根類,和采用了NSObject協(xié)議或者其它根類協(xié)議(“root” protocols)一道,為所有的非代理(non-proxy)Cocoa對象指定了以下的定義(interface)和特有的事件:

  • Allocation, initialization, 和 duplication。一些NSObject方法(包括一些采用的協(xié)議)用來處理創(chuàng)建(creation),初始化(initialization)和復(fù)制(duplication)對象。
  • alloc和allocWithZone:方法在內(nèi)存中為一個對象分配了內(nèi)存空間并且設(shè)置它指向的對象的編譯器類定義(即是告訴編譯器定義了一個類,譯者注)。
  • init方法為對象的屬性初始化(prototype),一個讓實例變量初始化狀態(tài)的進程。類方法中的initialize和load讓一個類有機會初始化它們自己。
  • new一種方便的結(jié)合分配內(nèi)存和初始化的方法。
  • copy和copyWithZone:方法復(fù)制任意對象的內(nèi)存的實現(xiàn)方法(從NSCopying協(xié)議來的);mutableCopy和mutableCopyWithZone:(在NSMutableCopying協(xié)議中定義)將被應(yīng)用于(mplemented by)該類來完成不定的對象拷貝(make mutable copies of their objects)。
  • Object retention and disposa(對象的保留和釋放)。接下來的方法對于面向?qū)ο蟮某绦蛴绕涞闹匾?,那就是如何傳統(tǒng)的,明確的,形式化的(traditional, and explicit, form)實現(xiàn)內(nèi)存管理。
  • retain方法,增加對象的計數(shù)器。
  • release方法,減少對象的計數(shù)器
  • autorelease方法,自動減少對象的計數(shù)器,但是以推遲的方式來實現(xiàn)。
  • retainCount方法,返回一個對象當(dāng)前的計數(shù)器
  • dealloc方法應(yīng)用于類來釋放對象實例變量并釋放動態(tài)內(nèi)存。
  • Introspection 和 comparison(反省機制和對比機制).
    許多NSObject方法使你能夠讓編譯器查詢一個對象。反省方法(introspection methods)幫助你探查一個對象在類繼承機制中的位置,決定是否實現(xiàn)一些方法,并測試它是否遵循一些協(xié)議。而一些類僅是有一些方法。
  • superclass和class方法(類和實例(class and instance))分別返回接收器的父類和類,作為一個Class對象。
  • isKindOfClass:和isMemberOfClass:,通過這兩種方法可以確定一個類的從屬關(guān)系。后者測試一個接收器是否是一個指定類的實例;而后者可以測試類的從屬關(guān)系。
  • respondsToSelector: 方法測試一個接收器是否通過selector實現(xiàn)(implements)了一個標(biāo)志符話的方法。而instancesRespondToSelector:測試了一個給定的類實例化之后(這個消息的接收方法為靜態(tài)方法,譯者注)是否實現(xiàn)了一個指定的方法。
  • conformsToProtocol:方法,測試接收器(對象或者類)符合一個給定的協(xié)議(protocol)。
  • isEqual: 和 hash方法,用于對象比較。
  • description方法,允許一個對象返回一個字符串來描述它的內(nèi)容;這個常用于調(diào)試debugging (“print object”命令 ) 。通過“%@”以字符串輸出特殊的指定對象。(即是以NSLog的形式輸出)
  • Object encoding and decoding(對象的編碼和解碼).接下來的方法將與對象的編碼和解碼方式有關(guān) (作為一個歸檔處理的一部分):

  • encodeWithCoder: 和 initWithCoder:方法,NSCoding協(xié)議中僅有的組成成員。第一個允許對象編譯它的實例變量,第二個允許一個對象初始化它自身的解碼實例變量。

  • NSObject類聲明了一些與對象編碼相關(guān)的其它方法,有:classForCoder,replacementObjectForCoder:,和awakeAfterUsingCoder。

  • Message forwarding(消息轉(zhuǎn)發(fā)). forwardInvocation:允許一個對象把消息轉(zhuǎn)發(fā)給另一個對象。

  • Message dispatch(消息配送). 一個以performSelector...為開頭的方法允許你配送消息(message)直到指定的延遲后,并且可以從二級線程((synchronously or asynchronously)同步或者不同步地)配送消息到主線程。
    NSObject擁有許多其它的方法,比如版本和傳遞的類方法(class methods for versioning and posing)(之后將為你展示如何將一個類本身編譯為另一個類)。它既包括了方法讓你訪問編譯器數(shù)據(jù)結(jié)構(gòu)的類,比如selector方法和函數(shù)指針形式的方法實現(xiàn)。

最后編輯于
?著作權(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)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,053評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 26,323評論 19 129
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    扶光啟玄閱讀 5,204評論 0 13
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,618評論 30 472

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