Objective-Cブロックの実装でsuperのメソッドをサポートしていますか? Objective-Cブロックの実装でsuperを呼び出す
私は スーパー EXC_BAD_ACCESSエラーがスローされますが、私は[self methodToCall]
に
[super methodToCall]
からこれらの呼び出しを変更し、メッセージがレスポンダチェーンを上に移動させ、すぐとして、それがうまく働いたのメソッドを呼び出しました。
ブロックが存在するクラスのインスタンスには-methodToCall
の実装はありませんが、スーパークラスには1つあります(つまり、自己継承するクラス)。
私はブロックの実装の中でスーパーメソッドを呼び出すことが最初の(技術的に)問題だったので、将来私はそれを避けることができるのかということを知りたいだけです。変数がブロック内でどのようにキャプチャされているか、スタックとヒープについて何かがキャプチャされているかどうかに疑問がありますが、具体的な考えはありません。
注:ブロックがプロパティに格納されてからブロック実装コードが呼び出されるまでには、コピーが使用されるため、ブロックのライフサイクルに問題はないと思われます大丈夫です。また、これはiPhoneデバイス(3G)でクラッシュするだけでしたが、iPhone Simulatorでクラッシュすることなく動作していました。 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];
}
}];
詳細な説明をいただき、ありがとうございます。 – Andrew
問題ありません。それは確かに以前に私に起こっていない興味深い問題です。 –