Чи є метод, який я можу змінити у своїх спеціальних класах, щоб коли
NSLog(@"%@", myObject)
буде викликано, він надрукує поля (або все, що я вважаю важливим) мого об'єкта? Я думаю, що я шукаю еквівалент Objective-C Java toString()
.
Чи є метод, який я можу змінити у своїх спеціальних класах, щоб коли
NSLog(@"%@", myObject)
буде викликано, він надрукує поля (або все, що я вважаю важливим) мого об'єкта? Я думаю, що я шукаю еквівалент Objective-C Java toString()
.
Відповіді:
Це description
метод екземпляра, оголошений як:
- (NSString *)description
Ось приклад реалізації (завдяки граммарк):
- (NSString *)description {
return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}
debugDescription
також зарезервований? Хоча я думаю, що DebugDescription
він повинен використовуватись налагоджувачем типу LLDB.
Ви можете перекрити метод опису NSObject:
- (NSString *)description
Щодо теми реєстрації, я рекомендую цю публікацію в блозі для кращого входу в Objective-C.
Ви можете використовувати дві функції.
- (NSString*)description
Це відобразиться, коли ви поставите об'єкт як, IE параметр для NSLog
. Інша функція опису:
- (NSString*)debugDescription
Це буде викликано, коли ви зробите це po anInstanceOfYourClass
у вікні команди налагодження. Якщо у вашому класі немає debugDescription
функції, то він просто description
буде викликаний.
Зауважте, базовий клас NSObject
дійсно description
реалізований, але він досить голий: він відображає лише адресу об'єкта. Ось чому я рекомендую вам реалізовувати description
в будь-якому класі, з якого ви хочете отримати інформацію, особливо якщо ви використовуєте description
метод у своєму коді. Якщо ви все-таки використовуєте description
у своєму коді, я пропоную вам також реалізувати debugDescription
, також зробивши debugDescription
більш багатослівним.
description
властивість зарезервована ... і надасть корисну інформацію про налагодження! У такому випадку вам потрібно буде придумати своє власне унікальне ім'я методу.