由于释放了对正在执行的块的引用的变量,我遇到了崩溃。这是代码示例:
这是现在发布的问题,在同一设备上的调试运行正常,它必须作为附加运行才能崩溃。
- (void)test {
_test = [self doLater:^{
_count++;
[self test];
} :3];
}
这是在 NSObject 类别中定义的:
- (DoLaterProcess *)doLater:(void (^)())method :(double)delay {
return [[DoLaterProcess new] from:method :delay];
}
使用类的结束实现:
@implementation DoLaterProcess {
id _method;
BOOL _stop;
}
- (void)methodToPerform:(void (^)())methodToInvoke {
if (_stop)return;
if (NSThread.isMainThread) methodToInvoke();
else [self performSelectorOnMainThread:@selector(methodToPerform:) withObject:methodToInvoke waitUntilDone:NO];
}
- (DoLaterProcess *)from:(void (^)())method:(NSTimeInterval)delay {
[self performSelector:@selector(methodToPerform:) withObject:method afterDelay:delay];
_method = method;
return self;
}
- (void)stop {
_stop = YES;
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(methodToPerform:) object:_method];
}
@end
所以我知道 _test 变量被释放,然后可能在它被释放时也被阻塞?这就是它崩溃的原因吗?但是为什么它不会在调试中崩溃,我可以强制编译器在调试中也崩溃吗?谢谢你。