如何分配->发送->接收->投射->将UnsafeRawPointer从扩展名分配到应用程序?

问题描述 投票:1回答:1

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)

主要问题?

  • 发送字符串使用什么类型?
  • 如何分配内存权?
  • 如何在观察器中将其强制转换为String?
  • 如何正确释放内存?
ios swift macos notifications darwin
1个回答
0
投票

感谢@MartinR,我得到了所有有关我问题的答案。

我们无法通过CFNotificationCenterPostNotification发送对象,因此我们需要使用DarwinUserDefaults(suitename:)组合。

架构

  1. 在应用程序CFNotificationCenterAddObserver中添加code观察者
  2. sending object保存到UserDefaults(suitename:)
  3. 通过didObjectChanged CFNotificationCenterPostNotification发送code通知>
  4. 在应用程序didObjectChangedCFNotificationCallback中捕获code通知
  5. sending object读取UserDefaults(suitename:)
  6. 主题外

问题为什么使用UnsafeRawPointersample

Answer

CFNotificationCenterPostNotification实际上是C function,并且回调也是纯C functionCSwift typesinstance pointers一无所知。这就是为什么object参数是UnsafeRawPointer(与Swift等效的void *)的原因。
© www.soinside.com 2019 - 2024. All rights reserved.