gpt4 book ai didi

objective-c - 一段简单的代码,在 GC 下运行良好,但在 ARC 中开始崩溃

转载 作者:行者123 更新时间:2023-12-03 16:32:37 27 4
gpt4 key购买 nike

我有以下简单的“检查我的应用程序是否设置为在登录时启动”代码。它在垃圾收集下工作得很好。然而,自从我开始使用 ARC(并根据需要插入“__bridge”)后,代码开始随机且不可预测地崩溃。根据堆栈跟踪,代码在某些 CFRelease 期间崩溃。有什么想法可能会导致 ARC 下发生这种情况吗?

- (BOOL)loginItemExists
{
NSString *appPath = [[NSBundle mainBundle] bundlePath];
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL,
kLSSharedFileListSessionLoginItems, NULL);
BOOL found = NO;
UInt32 seedValue;
CFURLRef thePath;
CFArrayRef loginItemsArray = LSSharedFileListCopySnapshot(loginItems,
&seedValue);
for (id item in (__bridge NSArray *)loginItemsArray)
{
LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)item;
if (LSSharedFileListItemResolve(itemRef, 0, &thePath, NULL) == noErr)
{
if ([[(__bridge NSURL *)thePath path] hasPrefix:appPath])
found = YES;
}

//docs for LSSharedFileListItemResolve say we should release the CFURLRef
if (thePath != NULL)
CFRelease(thePath);

if (found)
break;
}

CFRelease(loginItemsArray);
CFRelease(loginItems);
return found;
}

最佳答案

如果该项目未解析,您将在第二次循环中获得双重释放。在开始时以及释放后将 thePath 设置为 nil,这将修复崩溃。

关于objective-c - 一段简单的代码,在 GC 下运行良好,但在 ARC 中开始崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590649/

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