Ios 如何将release与_块变量一起使用?

Ios 如何将release与_块变量一起使用?,ios,memory-management,objective-c-blocks,Ios,Memory Management,Objective C Blocks,下面的代码运行良好,我只是不知道该发布到哪里,因为我不确定规则是什么。我没有用弧 - (void)myFunc { // stuff happens __block UIImage* photo = [UIImage imageWithCGImage:croppedCGImage]; [photo retain]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAUL

下面的代码运行良好,我只是不知道该发布到哪里,因为我不确定规则是什么。我没有用弧

- (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
} 
如果我理解文档中的内容,请正确查找块存储类型以及对象和块变量,则无需保留photo变量:\块变量位于变量词法范围与变量词法范围内声明或创建的所有块和块副本之间共享的存储中。因此,如果在帧内声明的块的任何副本在帧结束后仍然存在,则存储将在堆栈帧被破坏后仍然存在。
但这并不能解释为什么你的EXC\u访问不好。

你没有抓住要点。指针所在的变量位于共享存储器上。它指向的对象需要保留和释放。@newacct:感谢您指出这一点。不管怎样,我不完全确定我是否正确理解了这些文件。没有理由在photo上使用_块,因为photo未分配到任何位置。将[photo release]放置在dispatch_异步块内部的末尾不会导致任何问题。你的问题一定是因为你没有表现出来。