2012-06-25 81 views
-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。你怎么看?

+0

有什么棘手的问题?我的意思是,没有在Objective-C参考书中记录的东西? –

+1

有些人需要RTFM。 – futureelite7

回答

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的页头] INIT]。然而,由于用户在分配新对象时无法选择使用哪个初始化器,因此大多数书籍建议使用alloc/init方法创建新对象,而不是使用这种方法。

1

回答Ë

我几乎从来不使用[MyClass alloc][MyClass new],但往往[[MyClass alloc] init]

报价由Chuck

最初在Objective-C,对象是新创建的。随着OpenStep/Cocoa框架的发展,设计人员开发了这样的观点,即为对象分配内存并初始化对象的属性是不同的问题,因此应该是单独的方法(例如,对象可能分配在特定的内存区域中)。所以对象创建的alloc-init风格受到青睐。基本上,new是旧的,几乎不被大量使用 - 因此你会看到Cocoa类有很多init方法,但几乎没有任何自定义的新方法。

+0

'[MyClass new]'与调用'[[MyClass alloc] init]' – JustSid

+0

'基本相同。'[[[NSMutableArray alloc] init]'和[NSMutableArray new]'确实是一样的。然而,类可能会使用'[[MyClass alloc] init]'覆盖'new'实现,确保对象被分配和初始化(当然总是有例外)。 – Anne

+0

类也可以重写'alloc',重写'alloc'的类的数量可能与重写'new'的类相同。 – JustSid

相关问题