Objective c 缺失初始的后果?

Objective c 缺失初始的后果?,objective-c,cocoa-touch,cocoa,init,nsobject,Objective C,Cocoa Touch,Cocoa,Init,Nsobject,在将一个编码非常糟糕的iOS项目移植到OSX的过程中,我强调要保留模型层,以便(稍后)能够保持两个版本的同步 我目前没有权限更改iOS代码库,也不想特别更改。此外,对模型层的所有故障进行测试并工作 他们说,如果它没有坏,就不要修理它。所以我想我的问题是,下面的代码是不是坏了?注意,alloc之后没有调用init,被实例化的类是NSObject的一个直接子类 ... SuspectClass *obj = [SuspectClass alloc]; obj.arrayProperty = [NSA

在将一个编码非常糟糕的iOS项目移植到OSX的过程中,我强调要保留模型层,以便(稍后)能够保持两个版本的同步

我目前没有权限更改iOS代码库,也不想特别更改。此外,对模型层的所有故障进行测试并工作

他们说,如果它没有坏,就不要修理它。所以我想我的问题是,下面的代码是不是坏了?注意,
alloc
之后没有调用
init
,被实例化的类是
NSObject
的一个直接子类

...
SuspectClass *obj = [SuspectClass alloc];
obj.arrayProperty = [NSArray arrayWith...];

// etc.
...

我想另一种解决问题的方法是,如果
NSObject
init
实际上向对象添加了任何内容?

从NSObject中
init
的文档中可以得到正式的答案:“一个对象只有在初始化之后才能使用。”

…实际答案是:“NSObject类中定义的init方法不进行初始化;它只返回self。”

:-)


尽管功能正常,但考虑到需要某种形式的
init
的警告位置的数量,我认为我不会信任裸
alloc

如果没有init,则会得到一个处于未定义状态的“对象”(内存中至少有足够的空间存放“对象”)。您无法知道内存中的该位置会发生什么情况,因此必须使用init

+1该代码现在可以工作,因为NSObject的init当前不做任何事情,而它自己的init当前不做任何事情,并且它当前直接从NSObject继承。未来有三件事可能会改变,这将破坏代码,其中一件只有苹果可以控制。我意识到未来事情可能会改变——我想我想让两个项目之间共享代码库的愿望压倒了我想做应该做的事情的愿望,如果这样,当前版本的代码实际上不会改变任何东西。谢谢你的回答,我想我应该读得更好@Monolo:请记住,苹果不会在他们更改
init
以在下一版本中执行某项操作的当天向您发送电子邮件。当用户升级到最新的操作系统,你的应用程序崩溃,用户开始留下一星级评论时,你会发现这一变化。