Чи є метод, який я можу змінити у своїх спеціальних класах, щоб коли
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властивість зарезервована ... і надасть корисну інформацію про налагодження! У такому випадку вам потрібно буде придумати своє власне унікальне ім'я методу.