Как выделить -> отправить -> получить -> приведение -> освободить UnsafeRawPointer от расширения к приложению? - PullRequest
1 голос
/ 03 октября 2019

Я новичок в UnsafeRawPointer. Как я получил, мне нужно выделить небезопасную память в моем расширении и отправить указатель на мое приложение, где должен привести и выпустить его. Ниже приведен набросок того, что я хочу сделать. Я хотел бы отправить string message из расширения Safari и получить его в приложении по 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?
  • Как правильно распределить память?
  • Как привести ее к String в обозревателе?
  • Как освободить память, верно?

1 Ответ

0 голосов
/ 04 октября 2019

Спасибо @MartinR, я получил все ответы на свои вопросы.

Мы не можем отправить объект, хотя CFNotificationCenterPostNotification, поэтому нам нужно использовать комбинацию Darwin и UserDefaults(suitename:).

Схема

  1. Добавить наблюдателя CFNotificationCenterAddObserver в приложение код
  2. Сохранить sending object в UserDefaults(suitename:)
  3. ОтправитьdidObjectChanged уведомление через CFNotificationCenterPostNotification код
  4. Catch didObjectChanged уведомление в CFNotificationCallback в приложении код
  5. Чтение sending objectот UserDefaults(suitename:)

Не по теме

Вопрос Почему мы используем UnsafeRawPointer? образец

Ответ CFNotificationCenterPostNotification на самом деле C function, и обратный вызов также является чистым C function. C ничего не знает о Swift types или instance pointers. Вот почему параметр объекта является UnsafeRawPointer (Swift эквивалент void *).

...