Не можете включить «я» в метод описания Objective-C? - PullRequest
8 голосов
/ 23 мая 2009

У меня очень простой класс, в основном со свойствами типа NSString. В нем я написал тривиальную реализацию метода описания. Я обнаружил, что всякий раз, когда я пытаюсь включить в описание слово «self», оно ломает мое приложение для iPhone. Примером является что-то вроде следующего:

- (NSString *)description
{
    NSString *result;

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

    return result;
}

Как только я удаляю первый параметр в строке формата, self, он работает как положено.

Ответы [ 3 ]

30 голосов
/ 23 мая 2009

Используйте %p для self, тогда будет отображаться адрес self. Если вы используете %@, то он вызовет description для self, что приведет к бесконечной рекурсии.

12 голосов
/ 07 июня 2009

Вы можете использовать [супер описание] вместо себя, чтобы избежать бесконечной рекурсии, например:

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@: %@", [super description], [self someVar]];
}
6 голосов
/ 23 мая 2009

Вы понимаете, что настраиваете бесконечную рекурсию.

Ваша реализация description неявно вызывает себя, когда вы передаете self, который затем вызывает себя и т. Д.

Ваш сбой, скорее всего, связан с исчерпанием стекового пространства ... если хотите, с "переполнением стека". Примерка с учетом сайта: -)

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