学习Objective-C并阅读示例代码,我注意到对象通常是使用以下方法创建的:
SomeObject *myObject = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
代替:
SomeObject *myObject = [SomeObject new];
Run Code Online (Sandbox Code Playgroud)
是否有理由这样做,因为我已经读到它们是等同的?
注意:我对Objective-C比较新,我来自Java和PHP.
有人可以向我解释为什么我总是要先分配然后初始化一个实例?
不能在这样的init方法中完成:
+ (MyClass*)init {
MyClass *instance = [MyClass alloc];
[instance setFoo:@"bla"];
return instance;
}
+ (MyClass*)initWithString:(NSString*)text {
MyClass *instance = [MyClass init];
[instance setFoo:text];
return instance;
}
...
Run Code Online (Sandbox Code Playgroud)
这只是旧C日的残骸还是有些东西我没有看到?
我知道这不是问题,因为我总是可以调用alloc和init,但由于它有点乏味,我想至少知道我为什么要这样做.
到目前为止,我喜欢语言的表达能力,但这是我想要完全理解的,以便考虑Objective-C的方式.
谢谢!