注意:我是 Objective-C 的新手,来自 Java 和 PHP。
有人可以向我解释为什么我总是必须先分配然后初始化实例吗?
这不能像这样在初始化方法中完成吗:
+ (MyClass*)init {
MyClass *instance = [MyClass alloc];
[instance setFoo:@"bla"];
return instance;
}
+ (MyClass*)initWithString:(NSString*)text {
MyClass *instance = [MyClass init];
[instance setFoo:text];
return instance;
}
...
这只是旧 C 时代的遗留物还是有什么我没有看到的东西?
我知道这不是问题,因为我也可以总是调用 alloc 和 init,但由于这有点乏味,我想至少知道我为什么要这样做。
到目前为止,我喜欢这门语言的表现力,但这是我想要完全理解的东西,以便以 Objective-C 的方式思考。
谢谢!
最佳答案
+new 最终向类发送一条 +alloc 消息,并向从 +alloc 返回的任何内容发送一条 -init 消息。
NeXT 之所以背离 Stepstone 使用 +new 消息的惯例(这是 Smalltalk 的想法),是因为在早期,他们遇到了希望能够多次初始化同一个对象的情况。
关于objective-c - 为什么 alloc 和 init 在 Objective-C 中分开调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1385410/