gpt4 book ai didi

macos - GCD block 在调用时触发 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 17:44:15 26 4
gpt4 key购买 nike

我正在制作一个非垃圾收集的 MacFUSE Cocoa 应用程序,我想在其中使用 GCD block 作为委托(delegate)。但是,我的程序在调用该 block 期间崩溃,只留下 EXC_BAD_ACCESS

我的程序使用基于 Mac OS 10.5 SDK 构建的框架,该框架不支持垃圾收集(也不支持 64 位)和 MacFUSE 框架。该程序作为 32 位程序构建时没有任何警告或错误。其他build设置(例如优化级别)保留为原始值。

所以我有我的应用程序 Controller ,我从中创建这个 block 并调用runWithContinuation:

AFSPasswordPrompt* prompt = [[AFSPasswordPrompt alloc] initWithIcon:icon];
dispatch_block_t continuation = ^{
archive.password = prompt.password;
[self mountFilesystem:fsController];
[prompt performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
};
[prompt runWithContinuation:continuation];

runWithContinuation: 保留 block 并实例化一个 Nib 。仅当用户通过按“打开”按钮取消密码提示时才会调用该 block 。

-(void)runWithContinuation:(dispatch_block_t)block
{
continuation = [block retain];
[passwordPrompt instantiateNibWithOwner:self topLevelObjects:NULL];
imageView.image = image;
[window makeKeyWindow];
}

-(IBAction)open:(id)sender
{
continuation();
[self close];
}

-(void)close
{
[window close];
[continuation release];
}

我的问题是,当我点击 continuation() 时,我的程序会触发 EXC_BAD_ACCESS,最后一个堆栈帧被称为 ?? 。其正下方是 open: 方法调用。

我真的不知道它是从哪里来的。 NSZombies 已启用,并且它们不报告任何内容。

有什么想法吗?

最佳答案

尝试复制该 block 而不是保留它。 block 一直存在于堆栈中,直到您调用 copy,然后它才会被复制到堆中。

关于macos - GCD block 在调用时触发 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4211828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com