Objective c 在回调方法中枚举磁盘时,DiskRef消失
我在一个正在进行的项目中使用了GitHub上项目中的DiskArbitration类 我正在通过Objective c 在回调方法中枚举磁盘时,DiskRef消失,objective-c,diskarbitration,Objective C,Diskarbitration,我在一个正在进行的项目中使用了GitHub上项目中的DiskArbitration类 我正在通过hdiutil装载/卸载OS X安装程序磁盘映像,有时为DARegisterDiskDescriptionChangedCallback定义的回调方法在枚举时磁盘列表发生变化时崩溃,然后传递的diskref变为NULL 下面是为回调调用的get函数: DARegisterDiskDescriptionChangedCallback(session, matching, NULL, DiskDescri
hdiutil
装载/卸载OS X安装程序磁盘映像,有时为DARegisterDiskDescriptionChangedCallback定义的回调方法在枚举时磁盘列表发生变化时崩溃,然后传递的diskref变为NULL
下面是为回调调用的get函数:
DARegisterDiskDescriptionChangedCallback(session, matching, NULL, DiskDescriptionChangedCallback, (__bridge void *)([NBCDisk class]));
...
void DiskDescriptionChangedCallback(DADiskRef diskRef, CFArrayRef keys, void *context) {
#pragma unused(keys)
if (context != (__bridge void *)([NBCDisk class])) return;
NSSet *uniqueDisksCopy = [uniqueDisks copy];
for ( NBCDisk *disk in uniqueDisksCopy ) {
if ( CFHash(diskRef) == [disk hash] ) {
CFDictionaryRef desc = DADiskCopyDescription(diskRef);
disk.diskDescription = desc;
CFRelease(desc);
[[NSNotificationCenter defaultCenter] postNotificationName:DADiskDidChangeNotification object:disk];
}
}
}
我通过复制并在上面枚举,解决了枚举时发生变异的问题
但是,此代码有时会在以下情况下崩溃:“***CFHash()用NULL***”调用
这是因为磁盘消失了,diskRef
可能已经被释放
所以,我需要一些提示。我想尝试制作一份diskRef
的副本,并尝试这样做:
DADiskRef diskRefCopy = diskRef;
但这也不起作用。还有别的办法复印吗?或者我应该用另一种方式来处理这个问题
所以,我需要一些提示。我想试着复制一份
diskRef,并尝试通过执行以下操作:
DADiskRef diskRefCopy = diskRef;
DADiskRef diskRefCopy=diskRef代码>
<> P>因为你与核心基金会互动;使用-
CFRetain(diskRef);
另外,请查看项目中的以下参考,第行的文件是Disk.m:
和行:
我希望有帮助!顺便说一句,不需要复制NSSet*uniqueDisksCopy=[uniqueDisks copy]
当磁盘消失时,请确保diskRef
已从uniqueDisks
中删除。谢谢您的回复,这有助于我找到问题所在。
return [uniqueDisk retain];