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的了解,这并不能说服我这个案例得到正确处理.感谢您的任何信息!
那会在保留/释放时泄漏,但不应该在ARC中泄漏.
编译器看到了-copy,这意味着-release需要a.如果你看一下生成的程序集,那应该就是你所看到的.
(嗯,正是你在整个装配过程中所看到的,这并不是一件容易的事.)
请注意,只需编译即可简化装配[block copy];.