Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 涂鸦揭秘区块使用中的bug I don';我不明白_Xcode_Macos_Debugging_Memory_Objective C Blocks - Fatal编程技术网

Xcode 涂鸦揭秘区块使用中的bug I don';我不明白

Xcode 涂鸦揭秘区块使用中的bug I don';我不明白,xcode,macos,debugging,memory,objective-c-blocks,Xcode,Macos,Debugging,Memory,Objective C Blocks,我有一个bug,我通过在Xcode中启用Scribble发现了这个bug,修复这个bug不是问题,它不是以最好的方式实现的,我可以删除整个块,但我不明白为什么我首先会遇到这个问题,这说明我不明白一些事情 如果我启用了Scribble,当它试图执行下面代码中的发布行时,它会崩溃 HDClipPlaybackController * theController = nil; if( theSource != nil ) { theController = [[HDClipPlayba

我有一个bug,我通过在Xcode中启用Scribble发现了这个bug,修复这个bug不是问题,它不是以最好的方式实现的,我可以删除整个块,但我不明白为什么我首先会遇到这个问题,这说明我不明白一些事情

如果我启用了Scribble,当它试图执行下面代码中的发布行时,它会崩溃

HDClipPlaybackController    * theController =  nil;
if( theSource != nil ) {
    theController = [[HDClipPlaybackController alloc] initWithClipProxyList:theSource];
}
else {
    theController = [[HDClipPlaybackController alloc] initWithClips:clips handles:[handles intValue]];
}
theController.startIndex = [startIndex intValue];
theController.completionHandler = ^(BOOL success){
    theController.completionHandler = nil;
    [theController release];       // <-- CRASH
};
[theController performSelectorInBackground:@selector(startDownloadingClips:) withObject:theController.clipProxyList.everyClipProxy];
HDClipPlaybackController*控制器=nil;
如果(源!=nil){
控制器=[[HDClipPlaybackController alloc]initWithClipProxyList:theSource];
}
否则{
控制器=[[HDClipPlaybackController alloc]initWithClips:clips句柄:[handles intValue]];
}
controller.startIndex=[startIndex intValue];
controller.completionHandler=^(BOOL成功){
controller.completionHandler=nil;

[theController release];//在
上的controller.completionHandler=nil;
行删除对块的最后一个引用,这会导致块被释放。然后在
上[theController release]
行,您访问块中存储的
控制器
变量的块捕获副本。但是您已经释放了块,因此您正在访问一个释放对象上的字段。

您是否显示了您的真实代码?也就是说,
控制器
从头到尾都是
nil
我删除了一些内容,我把它加回去是为了展示控制器是如何创建的,以及它会发生什么事情。我想,虽然在执行过程中,块不能被释放,但是我想没有理由假设它会被释放。