Can';在Objective-C描述方法中,是否有带有描述名称的ivar?

Can';在Objective-C描述方法中,是否有带有描述名称的ivar?,objective-c,Objective C,我正在尝试为NSObject派生对象实现Objective-C描述方法 但是,我的派生对象具有名称描述的ivar。出于某种原因,这导致了一场车祸 - (NSString *) description { NSMutableString *output = [NSMutableString string]; [output appendFormat:@"MyObject.description = %@\n", self.description]; return out

我正在尝试为NSObject派生对象实现Objective-C描述方法

但是,我的派生对象具有名称描述的ivar。出于某种原因,这导致了一场车祸

- (NSString *) description {

    NSMutableString *output = [NSMutableString string];
    [output appendFormat:@"MyObject.description = %@\n", self.description];

    return output;
}
为什么这会是一个问题?

简短回答:崩溃是堆栈溢出的结果,因为您的
-description
方法反复调用自身。要执行您想要执行的操作(从描述方法中访问ivar),您不应该在ivar前面使用前缀
self.

更多详细信息:

在Objective-C中,
self.description
[self description]
的缩写。使用点语法会通知编译器您想要访问名为
description
的属性,而不是ivar本身。

简短回答:崩溃是堆栈溢出的结果,因为
-description
方法重复调用自身。要执行您想要执行的操作(从描述方法中访问ivar),您不应该在ivar前面使用前缀
self.

更多详细信息:


在Objective-C中,
self.description
[self description]
的缩写。使用点语法会通知编译器您想要访问名为
description
的属性,而不是ivar本身。

这是一个问题,因为您正在创建一个无限循环
self.description
将调用[self description],这正是您所使用的方法。因此,您有重复调用自身的方法

- (NSString *) description {

    NSMutableString *output = [NSMutableString string];
    [output appendFormat:@"super's description = %@\n", [super description]];
    [output appendFormat:@"MyObject.description = %@\n", description];

    return output;
}

您可以直接访问实例变量,而不是使用self.description。另外,我还添加了一行代码来说明如何调用super的description方法(它不会创建无限循环)。

这是一个问题,因为您正在创建无限循环
self.description
将调用[self description],这正是您所使用的方法。因此,您有重复调用自身的方法

- (NSString *) description {

    NSMutableString *output = [NSMutableString string];
    [output appendFormat:@"super's description = %@\n", [super description]];
    [output appendFormat:@"MyObject.description = %@\n", description];

    return output;
}

您可以直接访问实例变量,而不是使用self.description。此外,我还添加了一行代码,说明如何调用super的description方法(它不会创建无限循环)。

this
?你认为你的意思是“自我”;-)(虽然<代码>此是C++的等价物,SSOTA)。nm,你修好了。@NSGod:已经修好了,但是谢谢你指出了。我总是犯那个错误。我在C++上剪切了牙齿,所以<代码>这个< /代码>自动弹出<代码>:<代码>代码>这个< /代码>?你认为你的意思是“自我”;-)(虽然<代码>此是C++的等价物,SSOTA)。nm,你修好了。@NSGod:已经修好了,但是谢谢你指出了。我总是犯那个错误。我用C++切齿,所以<代码>这个<代码>自动弹出<代码>:< /代码> + 1。我打电话给
[super description]
+1的观点很好。调用
[super description]