我在Objective-C的MacOS-X 10.6.7和Xcode 4.0.2中使用respondsToSelector方法來識別對象是否會響應某些消息。根據手冊,NSString不應該響應appendString:而NSMutableString應該。下面是該測試中,它的代碼段:爲什麼NSString響應appendString?
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[NSString alloc] init];
if ([myString respondsToSelector:@selector(appendString:)]) {
NSLog(@"myString responds to appendString:");
} else {
NSLog(@"myString doesn't respond to appendString:");
}
// do stuff with myString
[myString release];
[pool drain];
return 0;
}
和這裏的輸出:
Class02[10241:903] myString responds to appendString:
我已經有點預期相反。 NSString對象如何響應appendString:?這裏發生了什麼,我錯過了?
如果你發送了一個真正的'appendString:'消息,是否有什麼東西炸燬? – BoltClock 2011-05-05 08:55:02
是的:'試圖用appendString:'來改變不可變的對象。 – zoul 2011-05-05 08:56:57
@BoltClock:是的,它爆炸了,但不是使用'respondsToSelector:'方法來檢查在發送真正的'appendString:'消息之前它不會炸燬嗎? – user698769 2011-05-05 09:00:08