想知道,创建一个类有什么区别:
Class clazz = [NSString class];
[clazz alloc];
和
class_createInstance(clazz,0);
答案 0 :(得分:8)
基本上,你不应该使用class_createInstance()
,除非你对自己所做的事情有足够的了解,否则你可以自己回答这个问题。
致电class_createInstance()
会绕过+alloc
中已实施的所有特殊情况。如果您使用NSString
进行尝试,您将获得一个NSString
实例,而不是私有占位符类的实例,它是您要发送的任何-init...
消息的正确目标。< / p>
答案 1 :(得分:2)
一个是功能,另一个是方法。该函数由于是一个函数,不能超载。可以想象,该方法(因为它是一种方法)可以以不同的方式实现。
例如,由于Cocoa中的某些类(例如集合)是类集群,因此它们可能会覆盖+alloc
以实现自定义行为。使用函数时无法做到这一点。
答案 2 :(得分:2)
这里有一个描述:
http://www.cocoabuilder.com/archive/cocoa/111527-class-createinstance-with-nsarray-nsdictionary.html
基本上,class_createInstance用于Cocoa实现者,并为他们提供对进程的低级访问。 API用户应该使用alloc,它可能使用class_createInstance或类似的东西。