1

下面的代码工作正常,我只是不知道发布应该去哪里,因为我不确定规则是什么。我没有使用ARC。

- (void)myFunc {

    // stuff happens

    __block UIImage* photo = [UIImage imageWithCGImage:croppedCGImage];

    [photo retain];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
                                         (unsigned long)NULL), ^(void) {
        [self doStuffToPhoto:photo];
        // [photo release] causes EXC_BAD_ACCESS
    });

    // [photo release] causes EXC_BAD_ACCESS in doStuffToPhoto
}

- (void)doStuffToPhoto:(UIImage*)photo {
    // do stuff
    // [photo release] causes EXC_BAD_ACCESS
} 
4

1 回答 1

0

如果我理解正确的文档(在此处查找块存储类型对象和块变量,则无需保留您的照片变量: “__block 变量存在于变量的词法范围和所有块之间共享的存储中以及在变量的词法范围内声明或创建的块副本。因此,如果在帧内声明的块的任何副本在帧结束后仍然存在,则存储将在堆栈帧的破坏中继续存在。 但这没有解释为什么你会得到 EXC_BAD_ACCESS。

于 2013-05-08T08:06:00.593 回答