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

Inf*_*rid 5 objective-c

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

Class clazz = [NSString class];
[clazz alloc];
Run Code Online (Sandbox Code Playgroud)

class_createInstance(clazz,0);
Run Code Online (Sandbox Code Playgroud)

NSR*_*der 8

基本上,你不应该使用,class_createInstance()除非你对自己所做的事情有足够的了解,否则你可以自己回答这个问题.

呼叫class_createInstance()绕过已经实施的任何特殊情况+alloc.如果您尝试使用它NSString,您将获得一个NSString实例,而不是私有占位符类的实例,它是-init...您要发送它的任何消息的正确目标.

  • +1特别是"除非你......可以自己回答这个问题" (2认同)

Dav*_*ong 2

一个是函数,另一个是方法。该函数由于是函数,因此不能重载。该方法(因为它是一种方法)可以想象以不同的方式实现。

例如,由于 Cocoa 中的某些类(例如集合)是类簇,因此它们可能会被重写+alloc以实现自定义行为。使用函数时不能这样做。