为什么在iOS 10中添加"__NSSingleXXXI"私有类

S.C*_*ain 0 runtime objective-c ios ios10

增加了三个新的私有类是iOS 10

  • __NSSingleObjectArrayI
  • __NSSingleObjectSetI
  • __NSSingleEntryDictionaryI

当容器init与单个对象一起使用时,容器的集群将使用这三个新类.

在iOS 9中,还添加了'__NSArray0'和'__NSDictionary0'.

我不知道添加这些特殊私人课程的原因.有人可以告诉我为什么吗?

dre*_*lax 5

这只是最有可能的优化.例如,__NSSingleObjectSetI不需要打扰实际的哈希表,因为只有一个对象需要担心.类似的方法containsObject:不需要循环任何东西或查找任何东西,它可以简单地将参数与set/array/dictionary表示的单个对象进行比较.

类似地,__NSArray0(假设它用于空数组)可以有arrayByAddingObjectsFromArray:简单的方法发送copy到参数并返回它.一个小的优化,但仍然是一个优化.

当然,您不应该直接使用这些类(因为它们是私有的,并且是实现细节),框架将自动使用这些类.由于它一个实现细节,我无法确定这些私有类的真正目的,我只是在猜测.