我知道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
对象?
答案 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 = @"";
我希望我能够清楚地解释这一点。如果您有任何问题,请告诉我。