2016-07-13 1 views
0

Когда я использую метод swizze, чтобы зацепить какой-либо метод. Оригинальное название метода:Как подавлять потепление «Mehtod» XXXX «бесконечно рекурсивно»

- (void)printOutMessage:(NSString*)message; 

Мой метод крюков:

- (void)shzPrintOutMessage:(NSString*)message; 

Реализация моего метода крюков:

- (void)shzPrintOutMessage:(NSString *)message { 
//Do some thing I like 
    [self shzPrintOutMessage:message]; 
} 

Теперь я получил потепление: Mehtod 'shzPrintOutMessage:' бесконечно рекурсивно. Как я могу подавить вид этого потепления?

+1

Вы не могли рекурсию бесконечно. При swizzling вам нужно сохранить ссылку на оригинальную реализацию метода, а затем вызвать ее из замены. Вы не хотите вызывать реализацию замены самостоятельно. – Avi

ответ

1

Возможно, это поможет вам.

Определение strMsg

- (void)shzPrintOutMessage:(NSString *)message { 
//Do some thing I like 
    self->strMes = message; 
} 
1

Вы можете попробовать следующий код:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Winfinite-recursion" 
- (void)shzPrintOutMessage:(NSString *)message { 
    // Do some thing I like 
    [self shzPrintOutMessage:message]; 
} 
#pragma clang diagnostic pop