如何发送' dealloc'在Objective-c中向nil对象发送消息?

时间:2015-11-23 04:34:26

标签: objective-c null dealloc

我知道nil对象没有收到消息。 但dealloc不是。

考试代码在这里。

Book *theLordOfTheRing = [[Book alloc] init];

...

NSLog(@"title: %@", theLordOfTheRing.titleName);

 theLordOfTheRing.titleName = nil;

[theLordOfTheRing setTitleName:[theLordOfTheRing.titleName stringByAppendingString:@" vol.4"]];

NSLog(@"title: %@", theLordOfTheRing.titleName);

[theLordOfTheRing.titleName dealloc]; //Build is fine with this line.

----- console ----

标题:奖学金

标题:( null)

stringByAppendingString:消息无效 但dealloc已成功。

为什么工作' dealloc'到nil对象?

1 个答案:

答案 0 :(得分:1)

此代码将编译并运行,因为您可以将消息发送到nil的对象。当您向nil对象发送消息时,应用程序将继续执行。在调用[theLordOfTheRing.titleName dealloc];时,实际上并未调用dealloc方法,因为titleName为nil。该程序只是继续执行。

当您运行[theLordOfTheRing setTitleName:[theLordOfTheRing.titleName stringByAppendingString:@" vol.4"]];时,您得到(null),因为您将stringByAppendingString发送到已经为nil的对象(titleName)并且该方法未被执行。 [theLordOfTheRing.titleName stringByAppendingString:@" vol.4"];将“返回”nil,并且setTitleName方法将被调用参数为nil

您应该将titleName设置为nil而不是将其设置为@“”空格字符串,这样stringByAppendingString应该可以正常工作,因为titleName仍然是已分配和初始化。

theLordOfTheRing.titleName = @"";

我希望我能够清楚地解释这一点。如果您有任何问题,请告诉我。