在Objective-C描述方法中不能包含“self”?

时间:2009-05-23 07:05:47

标签: iphone objective-c cocoa cocoa-touch

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

- (NSString *)description
{
    NSString *result;

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

    return result;
}

只要将第一个参数删除到格式字符串self,它就会按预期工作。

3 个答案:

答案 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”。考虑到网站的拟合: - )