NSObject NSObject
在 Objective-C 里,几乎每一个类都会是继承自 NSObject,比如说你创建了一个 UIViewController ,它就继承自 UIResponder ,而 UIResponder 是从 NSObject 继承而来的。在 Swift 里,语法更新了,所以很少用到这个类,但偶尔还是会需要用一下下,比如说 NSCoding。
在我们的手机屏幕后面,NSObject 其实是一个包含了类和协议的实现文件。其中有一些非常实用的功能函数。在之前的几章里出现过的 copy 方法和 mutableCopy 方法,他们都是从 NSObject 继承而来的,下面还有一些:
- isKindOfClass :参数为 [SomeClass class],判断某一对象是否是某一类型或这一类型的子类。
- conformsToProtocol :如果一个对象遵从了某一协议,则返回 true
- respondsToSelector :检查对象上能否运行某一方法
- performSelector :在一个对象上运行某一方法
具体的使用方法看这里:
NSMutableArray *people = [@[@"Taylor Swift", @"Adele Adkins"]
mutableCopy];
if ([people isKindOfClass:[NSArray class]]) {
if ([people respondsToSelector:@selector(removeAllObjects)] ) {
[people performSelector:@selector(removeAllObjects)];
}
}
尽管看起来,这里创建的是一个 NSMutableArray 类型的数组,但其实在后台,依然是创建了一个 NSArray,所以我们的代码其实是新创建一个数组,然后把旧的删掉,
你也许会奇怪 performSelector 是什么东西?为什么不写 [people removeAllobjects]; 这个方法?
Objective-C 允许你自己设计字符串的选择器,这样程序运行时效率更高。在引入 ARC 技术之后,performSelector 就更常用了。