Iphone NSLog(“%”,超级)崩溃

Iphone NSLog(“%”,超级)崩溃,iphone,objective-c,cocoa,cocoa-touch,Iphone,Objective C,Cocoa,Cocoa Touch,我在一个方法(任何方法)中使用了NSLog(@“%@”,super),它正在崩溃。。。。为什么?如何打印超级内容 更新: currentclassname : superClassName { } 如果我使用NSLog(@“%@,[super description]);它正在打印”,而不是超级类名。。。它应该正确打印超级类名 提前感谢,使用-description,例如: NSLog(@"%@", [super description]); 如果您有权访问超类,则可以重写其-descrip

我在一个方法(任何方法)中使用了NSLog(@“%@”,super),它正在崩溃。。。。为什么?如何打印超级内容

更新:

currentclassname : superClassName
{
}
如果我使用NSLog(@“%@,[super description]);它正在打印
,而不是超级类名。。。它应该正确打印超级类名


提前感谢,

使用
-description
,例如:

NSLog(@"%@", [super description]);
如果您有权访问超类,则可以重写其
-description
方法以返回所需的任何信息,或者可能使用类别来扩充该类。

请尝试
NSLog(@“%@,[super view])
或者像[超级任意法];
你到底想从super中获得什么?

当遇到关键字
super
和方法调用时,编译器会生成一个不同的调用,而不是通常的调用

objc\u msgSendSuper*()
调用获取类型为的参数,而不是:

因此,
objc\u super*
值不是特殊实例,它们必须与特殊的
objc\u msgSendSuper*()
函数一起使用


因此,正如Alex所说,只要直接在
super
上调用
-description
,它的值在其上下文之外是没有意义的,除非您专门将它与运行时函数一起使用,如
objc\u msgSendSuper()

super
是一种向您自己发送消息并调用超类实现而不是您自己实现的方法。它不是一个单独的对象

NSLog
将一个对象作为
%@
的参数,您想在这里传递的对象就是您自己

坦率地说,我很惊讶有问题的代码甚至可以编译

如果您想记录超类对您自己的描述,而不是您自己的描述,那么正如Alex Reynolds所说,您必须使用
[super description]
消息作为
NSLog
的参数。这将使用超类的实现向您自己发送
description
消息,并将该消息返回的对象(作为您超类自身描述的NSString对象)作为参数传递给
NSLog

但这可能没有必要。如果您已经覆盖了
描述
,则该实现可以发送
[超级描述]
,并将该字符串*集成到它创建和返回的描述字符串中。如果您尚未覆盖
说明
,则发送给
self
说明
消息仍将命中超类的实现。无论哪种方式,都要将
self
而不是
super
传递给您的
NSLog
语句

*有几种方法可以将一个字符串集成到另一个字符串中;有关更多详细信息,请参阅

如果我使用NSLog(@“%@,[super description]);它正在打印
,而不是超级类名。。。它应该正确打印超级类名


不可以。使用
[super-aMethod]
而不是
[self-aMethod]
只会为您提供-aMethod的实现,如果它没有被重写,超类将使用它
[self className]
[super className]
都解析为NSObject的实现,它(我猜)查询对象的
isa
实例变量以获取名称

只是感兴趣-为什么有问题的变体不起作用?基本上NSLog(@“%@”,super)应该调用super上的-description,不管怎样,还是不?
struct objc_super {
   id receiver;
   Class class;
};