如何向 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 = @"";
希望我能解释清楚。如果您有任何问题,请告诉我。
我知道 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 = @"";
希望我能解释清楚。如果您有任何问题,请告诉我。