你如何分配一个对象?什么是分配对象的正确方法?
答案
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。你怎么看?
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方法创建新对象,而不是使用这种方法。
回答Ë
我几乎从来不使用[MyClass alloc]
或[MyClass new]
,但往往[[MyClass alloc] init]
。
报价由Chuck:
最初在Objective-C,对象是新创建的。随着OpenStep/Cocoa框架的发展,设计人员开发了这样的观点,即为对象分配内存并初始化对象的属性是不同的问题,因此应该是单独的方法(例如,对象可能分配在特定的内存区域中)。所以对象创建的alloc-init风格受到青睐。基本上,new是旧的,几乎不被大量使用 - 因此你会看到Cocoa类有很多init方法,但几乎没有任何自定义的新方法。
有什么棘手的问题?我的意思是,没有在Objective-C参考书中记录的东西? –
有些人需要RTFM。 – futureelite7