我在 NSArray 上写了一个方便的方法,它类似于 PHP 的 list() 函数,用于将数组“解包”为不同的对象:
- (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 *
遇到了 EXC_BAD_ACCESS 问题,但当在具有自己的自动释放池的线程上调用此方法(实际上是两次,如果重要的话)以将内容解压缩到临时本地堆栈变量中时,我遇到了 EXC_BAD_ACCESS 问题。当主线程出现并尝试(再次)自动释放内容时,EXC_BAD_ACCESS 被抛出。
在这种情况下,谁能帮助我遵循这些桥接参数的逻辑?我担心这__strong
会导致稍微不那么明显但同样邪恶的孪生表亲:内存泄漏......