ARCは非常に優れているように見えますが、一般的な命名規則/規則ではわかりにくい1つまたは2つのエッジケースがあります。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];
}
私の質問は:block
電話した後に漏れ-copy
ますか?コンパイラは、ブロックをいつ解放するかをどのように知るのでしょうか?Instrumentsはリークを検出しませんが、ARCについて私が知っていることを考えると、このケースが正しく処理されていることを私に納得させることはできません。情報ありがとうございます!