-5

你如何分配一个对象?

答案

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。你怎么看?

4

2 回答 2

1

答案 E

我几乎从不使用[MyClass alloc]or [MyClass new],但经常使用[[MyClass alloc] init]

查克引用:

最初在 Objective-C 中,对象是用 new 创建的。随着 OpenStep/Cocoa 框架的发展,设计者形成了这样一种观点,即为对象分配内存和初始化其属性是不同的关注点,因此应该是不同的方法(例如,一个对象可能被分配在特定的内存区域中)。所以创建对象的 alloc-init 风格开始流行起来。基本上,new 是旧的并且几乎不推荐使用——因此您会看到 Cocoa 类有很多 init 方法,但几乎没有任何自定义的新方法。

于 2012-06-25T11:37:54.970 回答
1
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 方法来创建新对象,而不是这个。

于 2012-06-25T11:41:41.753 回答