如何分配对象?
答案
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.
我正在考虑或者可能是d。你怎么看?
答案 0 :(得分:1)
回答E
我几乎从不使用[MyClass alloc]
或[MyClass new]
,但经常使用[[MyClass alloc] init]
。
引用Chuck:
最初在Objective-C中,使用new创建了对象。随着OpenStep / Cocoa框架的发展,设计人员提出了这样的观点:为对象分配内存并初始化其属性是单独的问题,因此应该是单独的方法(例如,对象可能在特定的内存区域中分配)。因此,对象创建的alloc-init风格受到青睐。基本上,new是旧的,几乎没有被弃用 - 因此你会看到Cocoa类有很多init方法,但几乎从来没有任何自定义的新方法。
答案 1 :(得分: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方法创建新对象而不是此。