我在IOKit中遇到IONotificationCreatePort函数的问题:
var NotificationPort = IONotificationPortCreate(MasterPort)
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
在第二行的函数调用中使用NotificationPort时,会出现以下编译器错误
'Unmanaged IONotificationPort'与...不同 'IONotificationPort'
如果我根据使用Swift with Cocoa和Objective-C文档中的信息使用以下代码,它会编译但会生成运行时错误
var NotificationPort = IONotificationPortCreate(MasterPort).takeRetainedValue()
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0xwhatever)
所以我认为我发现了运行时错误,IONotificationPort对象没有takeRetainedValue方法
我认为问题的症结在于IONotificationPortCreate函数创建了一个IONotificationPort对象并返回对它的引用。
我已经遍布整个地方,有很多关于如何将引用传递给Swift函数调用的信息,但我无处可寻找如何将引用作为返回值处理。
Swift可以通过引用调用对象吗?
或者我离开这里了吗????
这是我想要转换为swift的客观C代码:
_notificationPort = IONotificationPortCreate(masterPort);
IONotificationPortSetDispatchQueue(_notificationPort, _controllerQueue);
以下是我的swift文件中的完整代码段:
//Get IOKit Master Port
var MasterPort: mach_port_t = 0
let BootstrapPort: mach_port_t = 0
var MasterPortReturnCode: kern_return_t = 0
MasterPortReturnCode = IOMasterPort(BootstrapPort, &MasterPort)
println("Master port returned as \(MasterPort) with return code of \(MasterPortReturnCode)")
//Set up notification port and send queue
let DispatchQueue = dispatch_queue_create("com.apparata.AVB_Browser", DISPATCH_QUEUE_SERIAL)
var NotificationPort = IONotificationPortCreate(MasterPort)
IONotificationPortSetDispatchQueue(NotificationPort, DispatchQueue)