私はこのような方法を持っています:
- (void)processAThing:(id)thing error:(NSError * __autoreleasing *)error
{
@autoreleasepool {
// Start processing.
// Find some partway through error..
if (error) {
*error = [NSError errorWithDomain...];
return NO;
}
// More processing.
}
}
NSError が自動解放され、戻りが発生するとプールが排出されるため、これは壊れてクラッシュします。そのため、呼び出し元が取得するものは偽物になります。
メソッドを大幅に再設計できることはわかっているので、自動解放ブロックの外側にあるすべてのエラー ケースを収集しますが、この状況でエラー オブジェクトを処理する正しい方法があるかどうかを理解したいと考えています。ドメインとコードのプロパティは読み取り専用であるため、プールブロックの外で投機的な NSError を割り当て/初期化することはできません (メソッドが戻ると参照が消えると思います)。
メソッド宣言を次のように変更すると、問題が解決します。
- (void)processAThing:(id)thing error:(NSError * __strong *)error
しかし、その後、呼び出しサイトで非標準的な方法で大騒ぎする必要があります。これは、呼び出し元に内部 autoreleasepool の代償を払わせるにはひどいようです。
何かご意見は?ありがとう。