天天看点

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;

    ......

原来真是在这里声明的。里面还有很多方法不知道是做什么的,我觉得还是有必要研究一下,这些方法都是干啥用的。

大家没事的时候可以多看看我们常用的类,点进去瞅瞅都有什么方法。我们曾经用过的只是其中很小的一部分,还有很多很多我们从未使用的方法,是否想知道他们都是干啥的。

今天就到这里吧,只是小小的感慨下,突然发现自己还可以这样学习,很开心的一天。