如何向 Objective-c 中的 nil Object 发送 'dealloc' 消息?

How to send 'dealloc' message to nil Object in Objective-c?

我知道 nil object 没有收到消息。 但 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.

-----控制台----

标题:团契

标题:(空)


stringByAppendingString: 消息无效 但是 dealloc 有效。

为什么 'dealloc' 到 nil object?

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

当你 运行 [theLordOfTheRing setTitleName:[theLordOfTheRing.titleName stringByAppendingString:@" vol.4"]]; 你得到 (null) 因为你将 stringByAppendingString 发送到一个已经为 nil 的对象 (titleName) 并且该方法不是被执行。 [theLordOfTheRing.titleName stringByAppendingString:@" vol.4"]; 将 "return" nil 并且 setTitleName 方法将被调用,参数为 nil.

您不应该将 titleName 设置为 nil,而是以这种方式将其设置为 @"" 空白字符串 stringByAppendingString 应该可以工作,因为 titleName 仍在分配和初始化中。

theLordOfTheRing.titleName = @"";

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