ARC是否处理这种情况而不泄漏?如果是这样,怎么样?

use*_*375 4 cocoa objective-c

ARC似乎非常好,但是有一两个边缘情况,典型的命名约定/规则对我来说并不清楚.查看NSThread周围的以下类别实现:

@interface NSThread (BlockAdditions)
- (void)performBlock:(dispatch_block_t)block;
@end

@implementation NSThread (BlockAdditions)
- (void)internal_performBlock:(dispatch_block_t)block
{
    block();
}

- (void)performBlock:(dispatch_block_t)block
{
    [self performSelector:@selector(internal_performBlock:)
                 onThread:self
               withObject:[block copy]
            waitUntilDone:NO];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:block打电话后有泄漏-copy吗?编译器如何知道何时释放块?仪器没有检测到泄漏,但鉴于我对ARC的了解,这并不能说服我这个案例得到正确处理.感谢您的任何信息!

bbu*_*bum 5

那会在保留/释放时泄漏,但不应该在ARC中泄漏.

编译器看到了-copy,这意味着-release需要a.如果你看一下生成的程序集,那应该就是你所看到的.

(嗯,正是你在整个装配过程中所看到的,这并不是一件容易的事.)

请注意,只需编译即可简化装配[block copy];.