Вы могли сделать это с функцией прототипа:
void something(int i, string P1) {
something(i, P1, String.Empty);
}
void something(int i, string P1, string P2) {
something(i, P1, P2, String.Empty);
}
void something(int i, string P1, string P2, string P3) {
something(i, P1, P2, P3, String.Empty);
}
и так далее...
описание
- это то, что нужно, это то, что он называется для предоставления строкового представления объекта.
- (NSString*)description
{
return [NSString stringWithFormat:@"%@, %@; %@", a, b, c];
}
Я полагаю, это также предложено в книге Хиллегасса.
Вы также можете переопределить [NSObject debugDescription], который вызывается отладчиком. Это то, что вызывается при использовании "print to console" в отладчике. Вы также можете вызвать его прямо в NSLog.
По умолчанию в большинстве классов debugDescription
просто вызывает описание
, но вы можете заставить их возвращать отдельные строки. Это хорошее место для загрузки подробностей.
Категории - хорошее место для хранения метода как для ваших пользовательских классов, так и для существующих классов. Это особенно полезно, потому что вы можете включить категорию в отладочную сборку, но исключить ее в выпуске. Если категории нет, код вместо этого вызывает метод класса по умолчанию.
У меня есть категория отладки для UIView, которая выгружает все атрибуты, о которых я мог подумать. Если я обнаруживаю неприятную ошибку, я просто включаю категорию, и тогда я могу видеть все о каждом представлении прямо в консоли отладчика.
Я лично отменяю description
практически во всех создаваемых мной подклассах. Я предполагаю, как Том Дакеринг пишет в своем комментарии, что ваша цитата применима только к управляемым объектам.
- (NSString *)description
{
return [NSString stringWithFormat:@"%@ <%p>", NSStringFromClass([self class]), self];
}
To answer your question from the other direction, stringValue
is something altogether different—it doesn't describe the receiver, it's a property of it. Your custom description
may even include the stringValue
, or an excerpt of it if it's long.
A key difference is that stringValue
is often a mutable property (see, for example, that of NSControl), whereas description
is always an immutable property, computed upon demand.