gpt4 book ai didi

objective-c - 为什么 alloc 和 init 在 Objective-C 中分开调用?

转载 作者:太空狗 更新时间:2023-10-30 03:16:56 28 4
gpt4 key购买 nike

注意:我是 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com