gpt4 book ai didi

ios - 如何分配 -> 发送 -> 接收 -> 转换 -> 从扩展到应用程序解除分配 UnsafeRawPointer?

转载 作者:行者123 更新时间:2023-11-28 07:20:41 25 4
gpt4 key购买 nike

我是 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 发送对象,所以我们需要使用 DarwinUserDefaults(suitename:) 组合。

架构

  1. 在应用程序中添加 CFNotificationCenterAddObserver 观察器 code
  2. 发送对象保存在UserDefaults(suitename:)
  3. 通过CFNotificationCenterPostNotification发送didObjectChanged通知code
  4. 在应用程序的 CFNotificationCallback 中捕获 didObjectChanged 通知 code
  5. UserDefaults(suitename:) 中读取发送对象

题外话

问题 为什么我们使用UnsafeRawPointersample

Answer CFNotificationCenterPostNotification其实是一个C函数,回调也是一个纯C函数CSwift 类型实例指针 一无所知。这就是为什么对象参数是 UnsafeRawPointer(Swift 等同于 void *)。

关于ios - 如何分配 -> 发送 -> 接收 -> 转换 -> 从扩展到应用程序解除分配 UnsafeRawPointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226007/

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