我有一个非常直接的类,主要是NSString类型的属性。在其中,我写了一个描述方法的简单实现。我发现每当我尝试在描述中包含“self”时,它就会崩溃我的iPhone应用程序。一个例子如下:
- (NSString *)description
{
NSString *result;
result = [NSString stringWithFormat:@"me: %@\nsomeVar: %@", self, self.someVar];
return result;
}
只要将第一个参数删除到格式字符串self,它就会按预期工作。
答案 0 :(得分:30)
对%p
使用self
,然后它会显示self
的地址。如果您使用%@
,则会在description
上调用self
,这将设置无限递归。
答案 1 :(得分:12)
您可以使用[super description]而不是self来避免无限递归,如下所示:
- (NSString *)description
{
return [NSString stringWithFormat:@"%@: %@", [super description], [self someVar]];
}
答案 2 :(得分:6)
您确实意识到设置无限递归。
当您传入description
时,self
实施会隐式调用自身,然后调用自身,依此类推。
你的崩溃很可能是由于堆栈空间不足......如果你愿意,那就是“stackoverflow”。考虑到网站的拟合: - )