Iphone Can';t包括「;“自我”;在Objective-C描述方法中?
我有一个非常直截了当的类,主要是NSString类型的属性。在其中,我编写了描述方法的一个简单实现。我发现,每当我试图在描述中包含“自我”时,我的iPhone应用程序就会崩溃。例如,如下所示: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 *)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]];
}