它是正确的/ ellegant只使用alloc而没有init吗?

tou*_*per 6 iphone cocoa-touch memory-management objective-c init

如果我们不想在我们的类中实现init方法,并且记住NSObject中的init只返回对象的实例而没有初始化,如果我们已经使用alloc获取实例,我看不到调用init的意义.我已经尝试过并且有效,但我不确定它是否会导致未来出现问题.

myClass *newObject = [myClass alloc];
Run Code Online (Sandbox Code Playgroud)

代替:

myClass *newObject = [[myClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

非常感谢.

Ole*_*ann 16

不,只是打电话alloc不正确.alloc将对象的所有实例变量init清零,然后有机会将所有或某些实例变量设置为其默认值.有些类甚至使用他们的init方法创建另一个实例并返回一个实例而不是您分配的实例.

许多类都希望init调用它们的方法,如果你不调用它们可能会导致崩溃init.如果你在谈论一个直接继承NSObject并且不需要初始化实例变量的自定义类,你可能会侥幸逃脱,[myClass alloc]但它绝对不是一个好的编程风格.

  • @toupper:值得一提的是,如果你想要一个更短的语法,你可以做`[myClass new];`这相当于`[[myClass alloc] init];`,但它很难被认为是流行的. (2认同)