Ответ 1
Вы можете определить вспомогательный метод
-(void) helperMethod
{
[super doStuff];
// ...
[super doOtherStuff];
// ...
}
а затем do
__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 Runtime Programming Guide" вы никогда не должны звонить функции обмена сообщениями непосредственно в вашем коде.
- В зависимости от типа возвращаемого метода вы должны использовать
objc_msgSendSuper
илиobjc_msgSendSuper_stret
. - Для методов, принимающих аргументы, вы должны использовать
objc_msgSendSuper
для правильного (благодаря @newacct).