Objective c 仅对对象调用Alloc

Objective c 仅对对象调用Alloc,objective-c,Objective C,我正在使用以下代码初始化我的对象: Spaceship *spaceship = [Spaceship alloc]; [spaceship fire]; 正在调用fire方法,它似乎工作正常。我的问题是,当我没有使用init方法初始化对象时,它是如何工作的 由于objective-c只是将消息传递给接收者,因此fire方法将起作用。但在init中执行的任何初始化都不会执行 由于objective-c只是将消息传递给接收者,因此fire方法将起作用。但在init中执行的任何初始化都

我正在使用以下代码初始化我的对象:

 Spaceship *spaceship = [Spaceship alloc];

    [spaceship fire];

正在调用fire方法,它似乎工作正常。我的问题是,当我没有使用init方法初始化对象时,它是如何工作的

由于objective-c只是将消息传递给接收者,因此fire方法将起作用。但在init中执行的任何初始化都不会执行

由于objective-c只是将消息传递给接收者,因此fire方法将起作用。但在init中执行的任何初始化都不会执行

您的
-init
方法实际上做什么?如果您没有,我将告诉您一个秘密:在当前的运行时实现中,
NSObject
-init
几乎是不可操作的,因此忘记将
-init
发送给一个本身没有
-init
方法的对象并不是一个巨大的灾难。但是,您不应该依赖于此,您应该将
-init
发送到您的对象。

您的
-init
方法实际上做什么?如果您没有,我将告诉您一个秘密:在当前的运行时实现中,
NSObject
-init
几乎是不可操作的,因此忘记将
-init
发送给一个本身没有
-init
方法的对象并不是一个巨大的灾难。不过,你不应该依赖于此,你应该将
-init
发送到你的对象。

fire
对你在
init
方法中分配的
NSString
执行一个
NSLog()
,看看会发生什么……实际上,上述操作可能不会起到任何作用,因为
nil
的消息会被吞没,你的未初始化的
NSString
可能是
nil
…但是JeremyP和Black Frog是正确的,不要依赖于此。让
fire
做一个
NSLog()
的一个
NSString
,你在
init
方法中分配它,看看会发生什么…实际上,当发送给
nil
的消息被吞没时,上面可能不会做任何事,而你未初始化的
NSString
很可能是
nil
…但是JeremyP和Black Frog是正确的,不要依赖这一点。