переопределить описание или stringValue в какао? - PullRequest
5 голосов
/ 14 декабря 2009

Я хочу иметь описательную строку для объекта в Какао. Я думаю о переопределении либо метода описания, либо метода stringValue. Что предпочтительнее и почему? Единственное указание, которое я мог найти, было здесь с указанием

Вам не рекомендуется переопределять описание.

Это действительно то, что вы предлагаете? Любая другая предпочтительная точка переопределения?

Ответы [ 4 ]

7 голосов
/ 14 декабря 2009

Я лично переопределяю description практически во всех подклассах, которые создаю. Я полагаю, как пишет Том Дакеринг в своем комментарии, что ваша цитата относится только к управляемым объектам.

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ <%p>", NSStringFromClass([self class]), self];
}
5 голосов
/ 14 декабря 2009

description - это путь, который он называет для представления строкового представления объекта.

- (NSString*)description
{
    return [NSString stringWithFormat:@"%@, %@; %@", a, b, c];
}

Я полагаю, что это тоже можно предположить по книге Хиллегаса.

4 голосов
/ 15 декабря 2009

Чтобы ответить на ваш вопрос с другой стороны, stringValue - это нечто совершенно иное - оно не описывает получателя, это его свойство. Ваш пользовательский description может даже включать stringValue или его выдержку, если он длинный.

Ключевым отличием является то, что stringValue часто является изменяемым свойством (см., Например, свойство NSControl), тогда как description всегда является неизменяемым свойством, вычисляемым по требованию.

2 голосов
/ 14 декабря 2009

Вы также можете переопределить [NSObject debugDescription], который вызывается отладчиком. Это то, что вызывается при использовании «print to console» в отладчике. Вы также можете вызвать его прямо в NSLog.

По умолчанию в большинстве классов debugDescription просто вызывает description, но вы можете заставить их возвращать отдельные строки. Это хорошее место, чтобы загрузить выходные данные.

Категории - хорошее место для парковки метода как для ваших пользовательских классов, так и для существующих классов. Это особенно полезно, потому что вы можете включить категорию в отладочную сборку, но исключить ее в выпуске. Если категория отсутствует, код вызывает метод класса по умолчанию.

У меня есть категория отладки для UIView, которая выводит все атрибуты, которые я могу придумать. Если я сталкиваюсь с неприятной ошибкой, я просто включаю категорию, а затем вижу все о каждом представлении прямо в консоли отладчика.

...