メソッドが呼び出されたSample
後に、このコードがクラスのインスタンスをリークする (過度に保持する) 理由について何か考えはありますか? [startSampling:action:]
プロファイラーは、サンプリングが完了した後に正の保持カウントを示します (つまり、sample()
ブロックは を返しますYES
)。ARCは明らかに有効になっています。
@implementation Sample
- (void)startSampling:(BOOL (^)(Sample *sender))sample action:(void (^)(Sample *sender))action {
__block void (^next)(Sample *sender) = nil;
void (^block)(Sample *sender) = ^(Sample *sender) {
if (sample(sender)) {
action(sender);
} else {
[self performBlock:next afterDelay:self.duration / 100.0];
}
};
next = block;
[self performBlock:block afterDelay:self.duration / 100.0];
}
@end