在从直接超类重写的函数中,当函数尝试调用其自身的超类版本时,将抛出exc_bad_access。执行不会使它进入超类的函数,而是抛出来自objc_msgSend的信号。类和两个参数都是预期的。如果expired为true,则调用不会失败,在其他地方调用时,超类函数也不会失败。
- (void)customizeCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
if (expired)
{
//do some things
}
else
{
//fails here
[super customizeCell:cell atIndexPath:indexPath];
}
}
答案 0 :(得分:1)
原来在超级电话中有一个分配错误。我原本应该为一个参数的强制转换赋予一个新的变量,而是将它赋予它本身。从子类实现调用时,这可预测地崩溃了。如果直接调用,这实际上是变量作为参数,预期的行为。向函数添加日志记录语句或更改编译器标志会改变这种行为,因此看起来这只是垃圾内存的侥幸。