一、OC 数组的类体系
- 当我们创建一个 NSArray 对象时,实际上得到的是 NSArray 的子类 __NSArrayI 对象。同样的,创建 NSMutableArray 对象,得到的同样是其子类 __NSArray 对象。
- 有趣的是,当我们创建只有一个对象的 NSArray 时,得到的是__NSSingleObjectArrayI 类对象。
- __NSArrayI 和 __NSArrayM,__NSSingleObjectArrayI 为框架隐藏的类。
- OC 数组的类体系如下:
- 通过 NSArray 和 NSMutableArray 接口,返回的却是子类对象,这是怎么回事呢?
- NSArray 重写了+ (id)allocWithZone:(struct _NSZone *)zone方法,在方法内部,如果调用类为 NSArray 则直接返回全局变量 ___immutablePlaceholderArray,如果调用类为 NSMUtableArray 则直接返回全局变量 ___mutablePlaceholderArray。
也就是调用 [NSArray alloc
- NSArray 重写了+ (id)allocWithZone:(struct _NSZone *)zone方法,在方法内部,如果调用类为 NSArray 则直接返回全局变量 ___immutablePlaceholderArray,如果调用类为 NSMUtableArray 则直接返回全局变量 ___mutablePlaceholderArray。