UnsafeRawPointer
我是新手。当我得到时,我需要在扩展程序中分配不安全的内存,并将指针发送到必须强制转换和释放它的应用程序。下面是我想做的草图。我想从Safari扩展程序发送string message
并通过CFNotificationCenterGetDarwinNotifyCenter
在应用中接收它,该怎么做?
let center = CFNotificationCenterGetDarwinNotifyCenter()
CFNotificationCenterAddObserver(center, nil, { (_, observer, name, message, _) -> Void in
//message as String???
}, Self.action, nil, .deliverImmediately)
var message = "some text"
CFNotificationCenterPostNotification(center, .init(action), message, nil, true)
感谢@MartinR,我得到了所有有关我问题的答案。
我们无法通过CFNotificationCenterPostNotification
发送对象,因此我们需要使用Darwin
和UserDefaults(suitename:)
组合。
CFNotificationCenterAddObserver
中添加code观察者sending object
保存到UserDefaults(suitename:)
中didObjectChanged
CFNotificationCenterPostNotification
发送code通知>didObjectChanged
的CFNotificationCallback
中捕获code通知sending object
读取UserDefaults(suitename:)
问题为什么使用UnsafeRawPointer
? sample
Answer
CFNotificationCenterPostNotification
实际上是C function
,并且回调也是纯C function
。 C
对Swift types
或instance pointers
一无所知。这就是为什么object参数是UnsafeRawPointer
(与Swift
等效的void *
)的原因。