NSLog 总是打印对象的描述。
事实上它是 NS_FORMAT_FUNCTION。
FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
所以:
NSString *stringForNSLog = [NSString stringWithFormat:@"%@",[testObject testString]];
*stringForNSLog
应该完全是“(null)” 。
但是 testString 的值为 nil。
如果您正在研究 GNUStep,它是 Apple 的 Cocoa 的开源实现,您会发现如下内容:
所有的字符串格式的东西都写成GSFormat.m
并且在GSFormat.m
size_t len;
id obj;
NSString *dsc;
obj = args_value[specs[nspecs_done].data_arg].pa_object;
if (!obj) dsc = @"(null)";
else if ([obj respondsToSelector: @selector(descriptionWithLocale:)]) dsc = [obj descriptionWithLocale: locale];
else dsc = [obj description];
http://svn.gna.org/svn/gnustep/libs/base/trunk/Source/NSString.m
http://svn.gna.org/svn/gnustep/libs/base/trunk/Source/GSFormat.m