在Objective-C块的实现中,是否支持在super
上调用方法?
当我在super
上调用方法时,会抛出EXC_BAD_ACCESS
错误,但是一旦我将这些调用从[super methodToCall]
更改为[self methodToCall]
并让消息沿着响应者链向上传递,它就可以正常工作。
在包含该块的类的实例中没有-methodToCall
的实现,但是在超类(即self
继承的类)中有一个实现。
我只是想了解为什么在块的实现中在super
上调用方法首先是个问题(技术上),以便我以后避免它。我怀疑它与块中捕获变量的方式以及堆栈和堆有关,但我确实没有明确的想法。
注意:块实现代码在存储块到属性后最多几秒钟内被调用,该属性使用copy
,因此我认为这不是块的生命周期问题,所有这些看起来都很好。此外,这仅在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];
}
}];