在执行alloc和class_createInstance之间有什么区别

时间:2010-09-27 15:51:14

标签: objective-c

想知道,创建一个类有什么区别:

Class clazz = [NSString class];
[clazz alloc];

class_createInstance(clazz,0);

3 个答案:

答案 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或类似的东西。