你如何分配一个对象?
答案
a. MyClass *obj = malloc(sizeof(MyClass));
b. MyClass *obj = [MyClass alloc];
c. MyClass *obj = alloc(MyClass);
d. MyClass *obj = [MyClass new];
e. None of the above.
我在想b或者可能是d。你怎么看?
你如何分配一个对象?
答案
a. MyClass *obj = malloc(sizeof(MyClass));
b. MyClass *obj = [MyClass alloc];
c. MyClass *obj = alloc(MyClass);
d. MyClass *obj = [MyClass new];
e. None of the above.
我在想b或者可能是d。你怎么看?
答案 E
我几乎从不使用[MyClass alloc]
or [MyClass new]
,但经常使用[[MyClass alloc] init]
。
查克引用:
最初在 Objective-C 中,对象是用 new 创建的。随着 OpenStep/Cocoa 框架的发展,设计者形成了这样一种观点,即为对象分配内存和初始化其属性是不同的关注点,因此应该是不同的方法(例如,一个对象可能被分配在特定的内存区域中)。所以创建对象的 alloc-init 风格开始流行起来。基本上,new 是旧的并且几乎不推荐使用——因此您会看到 Cocoa 类有很多 init 方法,但几乎没有任何自定义的新方法。
a. MyClass *obj = malloc(sizeof(MyClass));
这是错误的。Objective-C 对象具有 malloc 无法创建的特定结构。这不会创建一个有效的 Objective-C 对象。
b. MyClass *obj = [MyClass alloc];
这是分配对象的正确方法。然而,所有的objective-c 对象都必须通过某种-init 消息才能使用。
c. MyClass *obj = alloc(MyClass);
不。
d. MyClass *obj = [MyClass new];
这实际上与 [[MyClass alloc] init] 相同。然而,由于用户在分配新对象时无法选择使用哪个初始化器,因此大多数书籍都推荐使用 alloc/init 方法来创建新对象,而不是这个。