NSProxy為什麼不繼承NSObject?

如果面試時面試官問

你知道哪些類是不繼承自NSObject的?以及這樣做的原因是什麼?

時,應該如何回答為什麼NSProxy不繼承NSObject?


謝邀,第一次被邀請,受寵若驚。

居然正好是我上個星期剛研究過的問題。

首先第一個問題:不繼承自NSObject的官方類據我所知只有NSProxy,當然理論上你也可以自定義一個不繼承於NSObject的根類,雖然平常一般不這樣做。

第二個問題:簡單說就是不需要實現那麼多雜七雜八的東西,多了反而可能引起衝突,比如KVC,NSProxy根本就不需要了。NSProxy主要目的是用forwardInvocation:方法來進行消息轉發,如果繼承NSObject容易導致衝突,所以你看看NSProxy的API就會發現相比NSObject來說太簡潔了。而NSProxy是遵循了NSObject協議(注意這裡是NSObject協議,不是類)的,裡面聲明了一套所有的根類都可以實現的基礎方法。

題主可以參考下這幾篇博文:NSObject:類與協議

NSProxy一些理解

輕鬆學習之 Objective-C消息轉發


推薦閱讀:

TAG:iOS | iOS開發 | ObjectiveC | Swift語言 |