天天看點

NSObject類了解

今天看一本書,偶然間看到關于繼承的那一章。上面有一句話是這麼說的:在OC中,允許定義自己的根類,但通常不這麼做,而是希望利用現有的類。是以,我們所定義的類都是屬于NSObject根類的派生類。

看到這裡,肯定有人說,這不都是廢話嗎?大家都知道啊!可是,我就想,既然蘋果允許自己定義根類,那麼怎麼定義呢?我嘗試用xcode進行定義一個不繼承自任何類的基類,并沒有成功。subclass那一欄必須選擇。

然後,我又想,我自己不能定義基類,那麼NSObject是個基類,它是繼承自什麼呢?于是點開xcode,進入NSObject類中檢視究竟。

NSObject類了解

image.png

NSObject類沒有繼承的父類,而是有一個協定,檢視這個協定。

NSObject類了解

才發現,原來經常用的很多方法都是在這裡聲明的。之前很少關注,突然發現,原來他們在這裡,居然有一點點的驚訝的感覺。

先看看NSObject中定義的方法:

  • +(void)load:常用于runtime中方法交換的;
  • -(instancetype)init ; 幾乎每天都用的初始化方法;
  • +(instancetype)alloc;幾乎每天都用開辟記憶體空間的方法;
  • -(void)dealloc; 經常使用,檢測頁面是否銷毀。
  • -(id)copy; 淺拷貝
  • -(id)mutableCopy; 深拷貝
  • +(BOOL)conformsToProtocol:(Protocol *)protocol;
  • -(IMP)methodForSelector:(SEL)aSelector;

    ......

原來真是在這裡聲明的。裡面還有很多方法不知道是做什麼的,我覺得還是有必要研究一下,這些方法都是幹啥用的。

大家沒事的時候可以多看看我們常用的類,點進去瞅瞅都有什麼方法。我們曾經用過的隻是其中很小的一部分,還有很多很多我們從未使用的方法,是否想知道他們都是幹啥的。

今天就到這裡吧,隻是小小的感慨下,突然發現自己還可以這樣學習,很開心的一天。

繼續閱讀