配列を個別のオブジェクトに「アンパック」するための PHP の list() 関数のように機能する NSArray のちょっとした便利なメソッドを書きました。
- (void)unpackInto:(__strong id *)obj1, ...
{
__strong id *idPtr;
va_list args;
va_start(args, obj1);
idPtr = obj1;
NSUInteger idx = 0;
NSUInteger count = [self count];
while (idPtr != NULL && idx < count) {
*idPtr = [self objectAtIndex:idx];
// Increment the args and idx count
idx++;
idPtr = va_arg(args, __strong id *);
}
}
私はもともと持っていまし__autoreleasing id *
たが、内容を一時的なローカルスタック変数に解凍するために、独自の自動解放プールを持つスレッドでこのメソッドが呼び出されたときに (問題がある場合は実際には 2 回)、EXC_BAD_ACCESS の問題に遭遇しました。メイン スレッドが戻ってきて、内容を (再び) 自動解放しようとすると、EXC_BAD_ACCESS がスローされました。
この場合、これらのブリッジング パラメーターを使用してロジックに従うことができる人はいますか? __strong
少し目立たないが、同じように邪悪な双子のいとこであるメモリリークにつながるのではないかと心配しています...