在 Objective-C 块的实现中是否支持在super上调用方法?
当我在super上调用一个方法时,会抛出一个EXC_BAD_ACCESS错误,但是一旦我将这些调用从[super methodToCall]
to更改为[self methodToCall]
让消息向上移动到响应者链,它就可以正常工作。
在该块所在的类的实例中没有实现-methodToCall
,但在超类(即 self 继承的类)中有一个。
我只是想知道为什么在块的实现中调用 super 上的方法首先是一个问题(技术上)的细节,所以我将来可以避免它。我怀疑它与如何在块中捕获变量以及有关堆栈和堆的某些内容有关,但我真的没有具体的想法。
注意:在将块存储在属性中后的几秒钟内调用块实现代码,该属性使用复制,所以我认为块的生命周期没有问题,一切看起来都很好。此外,这只是在 iPhone 设备 (3G) 上崩溃,但在 iPhone 模拟器中没有崩溃。
结果EXC_BAD_ACCESS
:
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[super didRetrieveItems];
} else {
[super errorRetrievingItems];
}
}];
工作完美,实现-didRetrieveItems
并-errorRetrievingItems
属于超类。
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[self didRetrieveItems];
} else {
[self errorRetrievingItems];
}
}];