2009-05-23 22 views
8

我有一个非常直接的类,主要是NSString类型的属性。其中,我写了一个简单的描述方法的实现。我发现,每当我尝试在描述中包含“自我”时,就会崩溃我的iPhone应用程序。一个例子是一些诸如下列:在Objective-C描述方法中不能包含“self”?

- (NSString *)description 
{ 
    NSString *result; 

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

    return result; 
} 

只要我删除了第一个参数格式字符串,自我,它按预期工作。

回答

30

使用%pself,那么它将显示地址self。如果您使用%@,那么它将调用descriptionself,这将设置无限递归。

6

你知道设置了一个无限递归。

您的description实现在您传递self时隐式调用自身,然后调用自身,依此类推。

您的崩溃很可能是由于堆栈空间用尽了......如果您愿意,可以使用“stackoverflow”。适合考虑网站:-)

12

您可以使用[超级描述]而不是自我,以避免无限递归,就像这样:

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