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 就更常用了。

results matching ""

    No results matching ""