Не может быть ивара с именем описания в методе описания Objective-C? - PullRequest
1 голос
/ 16 декабря 2010

Я пытаюсь реализовать метод описания Objective-C для моего объекта, производного от NSObject.

Однако у моего производного объекта есть ивар описания имени.И по какой-то причине это вызывает сбой.

- (NSString *) description {

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

    return output;
}

Почему это может быть проблемой?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2010

Краткий ответ: Сбой является результатом переполнения стека, поскольку ваш метод -description вызывает себя неоднократно. Чтобы делать то, что вы хотите (доступ к ivar из метода описания), вы должны , а не использовать префикс self. перед ivar.

Подробнее:

В Objective-C self.description является сокращением для [self description]. Использование точечного синтаксиса информирует компилятор о том, что вы хотите получить доступ к свойству с именем description, а не самого ивара.

1 голос
/ 16 декабря 2010

Это проблема, потому что вы создаете бесконечный цикл.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 (который не создает бесконечный цикл).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...