gpt4 book ai didi

objective-c - CFSetGetCount 崩溃(EXC_BAD_ACCESS)

转载 作者:行者123 更新时间:2023-12-03 16:42:09 25 4
gpt4 key购买 nike

我正在编写一个与 USB HID 设备连接的 Mac 应用程序。首先,我尝试打印出找到了多少台符合我的设备规范的设备。

//Create a HID Manager
IOHIDManagerRef hidManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);

//Create a dictionary and limit it to the uPPT
CFMutableDictionaryRef dict = CFDictionaryCreateMutable (kCFAllocatorDefault, 1, &kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(dict, CFSTR("VendorID"), CFSTR("0x04D8"));
CFDictionarySetValue(dict, CFSTR("ProductID"), CFSTR("0x0054"));
IOHIDManagerSetDeviceMatching(hidManager, dict);

CFSetRef devSet = IOHIDManagerCopyDevices (hidManager);
CFIndex numDevices = CFSetGetCount(devSet);
NSLog(@"%ld uPPTs found", numDevices);

不幸的是,这在 CFSetGetCount(devSet) 处崩溃。据我所知,我正在正确使用它,但应用程序挂起,并且我看到“线程 1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)”。有任何想法吗?谢谢

最佳答案

devSetNULL(正如 Address=0x0 在崩溃中所证明的那样。)您必须始终进行测试在 Core Foundation 中获取或创建 CFTypeRef 时使用 NULL,因为 Apple 的 API 不这样做,并且如果传递 NULL 通常会崩溃。

同样,这不是崩溃的原因,但您必须确保释放(使用 CFRelease())您创建、复制的 CFTypeRef,或保留,因为 ARC 不会为您做这件事。如前所述,在调用 CFRelease() 之前必须检查 NULL,否则会发生崩溃。

关于objective-c - CFSetGetCount 崩溃(EXC_BAD_ACCESS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14487912/

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