Вы можете определить вспомогательный метод
-(void) helperMethod
{
[super doStuff];
// ...
[super doOtherStuff];
// ...
}
, а затем сделать
__weak MyClass *weakSelf = self;
[self somethingWithCompletion:^(){
MyClass *strongSelf = weakSelf;
[strongSelf helperMethod];
}];
Прямое решение с использованием методов во время выполнения выглядит следующим образом:
__weak MyClass *weakSelf = self;
[self somethingWithCompletion:^(){
MyClass *strongSelf = weakSelf;
if (strongSelf) {
struct objc_super super_data = { strongSelf, [MyClass superclass] };
objc_msgSendSuper(&super_data, @selector(doStuff));
}
});
Недостатки (в моем заключение):
- Подробнее (сложный) код.
- В соответствии с «Руководством по программированию времени выполнения Objective-C» вы никогда не должны звонить функции обмена сообщениями непосредственно в вашем коде.
- В зависимости от типа возвращаемого метода вам необходимо использовать
objc_msgSendSuper
или objc_msgSendSuper_stret
.
- Для методов, принимающих аргументы, вы должны наложить
objc_msgSendSuper
на соответствующий тип функции (благодаря @newacct).
«супер» - это выдумка. –
Is [super doStuff] отличается от [self doStuff]? – farski
@farski Ум ... хорошо ... Является ли яблоко отличным от еды апельсина? –