Я использую определенный API, который имеет некоторый класс, например ClassA
.Установить значение ivar из категории
ClassA
имеет свойство importantProperty
, Ивар = _importantProperty
, сеттер = setImportantProperty
Что мне нужно на самом деле обрабатывать в отладке, когда это свойство изменяется, и какие значения установлены для этого свойства и распечатать трассировку стека.
Я не могу наследовать этот класс и переопределить этот метод в моем случае, потому что он определил класс.
Поэтому я создал категорию отладки, которая переопределяет метод setImportantProperty
, и теперь я могу обрабатывать изменения stacktrace и значений, но этот метод делает исходный метод недоступным, а значение ivar не может быть изменено. Есть ли способ изменить этот ivar?
Вот мой метод:
@implementation ClassA (Test)
-(void) setImportantProperty:(id) newValue {
NSLog(@"%@, %@", newValue, [NSThread callStackSymbols]);
}
@end
Таким образом, вопрос, есть ли способ, чтобы реализовать такой код _importantProperty = newValue
в моем методе или есть какие-либо другие способы использования в моем случае?
Заранее благодарен!
звучит так, как будто вы ищете метод swizzeling. http://darkdust.net/writings/objective-c/method-swizzling – vikingosegundo
Вы уверены, что не хотите, чтобы точка останова? – Chuck
Как установить точку останова на метод, который находится в сторонней структуре? –