Iphone Can';t包括「;“自我”;在Objective-C描述方法中?

Iphone Can';t包括「;“自我”;在Objective-C描述方法中?,iphone,objective-c,cocoa,cocoa-touch,Iphone,Objective C,Cocoa,Cocoa Touch,我有一个非常直截了当的类,主要是NSString类型的属性。在其中,我编写了描述方法的一个简单实现。我发现,每当我试图在描述中包含“自我”时,我的iPhone应用程序就会崩溃。例如,如下所示: - (NSString *)description { NSString *result; result = [NSString stringWithFormat:@"me: %@\nsomeVar: %@", self, self.someVar]; return resul

我有一个非常直截了当的类,主要是NSString类型的属性。在其中,我编写了描述方法的一个简单实现。我发现,每当我试图在描述中包含“自我”时,我的iPhone应用程序就会崩溃。例如,如下所示:

- (NSString *)description
{
    NSString *result;

    result = [NSString stringWithFormat:@"me: %@\nsomeVar: %@", self, self.someVar];

    return result;
}

一旦我删除格式字符串self的第一个参数,它就会按预期工作

您确实意识到这会建立一个无限递归

当您传入
self
时,您的
description
实现会隐式地调用自身,然后它会调用自身,依此类推


您的崩溃很可能是由于堆栈空间耗尽。。。如果你愿意的话,可以说是“堆栈溢出”。考虑到站点:-)

%p
用于
self
,然后它将显示
self
的地址。如果您使用
%@
,那么它将调用
self
上的
描述
,这将设置无限递归。

您可以使用[super description]而不是self来避免无限递归,如下所示:

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@: %@", [super description], [self someVar]];
}