Как получить доступ к буферу Mac cardboard (буфер обмена) из языка C или bash? [Дубликат]

Есть разные способы обмена данными между действиями

1: Передача данных между действиями с использованием Intent

Intent intent=new Intent(this, desirableActivity.class);
intent.putExtra("KEY", "Value");
startActivity(intent)

2: Использование статического ключевого слова, определение переменной как public static и использование любой, где в проекте

      public static int sInitialValue=0;

используется в любом месте проекта, используя classname.variableName;

3: используя Database

, но его бит длительный процесс, вы должны используйте запрос для вставки данных и итерации данных с помощью курсора, когда это необходимо. Но нет возможности потерять данные без очистки кеша.

4: Использование общих настроек

намного проще, чем база данных. но есть какое-то ограничение, вы не можете сохранить объекты ArrayList, List и custome.

5: Создать геттер-сеттер в классе Aplication и получить доступ к любому где в проекте.

      private String data;
      public String getData() {
          return data;
      }

      public void setData(String data) {
          this.data = data;
      }

здесь установлено и получить от действий

         ((YourApplicationClass)getApplicationContext()).setData("abc"); 

         String data=((YourApplicationClass)getApplicationContext()).getData();  
9
задан Mr Aleph 5 May 2011 в 18:02
поделиться

2 ответа

Если вы ссылаетесь на рамки Cocoa или Foundation, вы можете использовать object-c в своем C-коде. Однако, если вы хотите использовать стандартный синтаксис обмена сообщениями, вам придется изменить расширение файла с .c на .m, чтобы оно было скомпилировано как объектное c. Если вы сохраните расширение .c, вы сможете использовать вызовы времени выполнения c-стиля для взаимодействия с объектами-объектами (например, objc_msgSend, objc_getClass и т. Д.).

Примеры: Внутри файла .m

void cFunction() {
    [[NSString alloc] init];
}

Внутри файла .c

void cFunction() {
    void* cls = objc_getClass("NSString");
    void* obj = objc_msgSend(cls, NSSelectorFromString(CFSTR("alloc")));
    obj = objc_msgSend(obj, NSSelectorFromString(CFSTR("init")));
}

Если вы выберете второй метод, обратитесь к Ссылка времени выполнения Objective-C .

13
ответ дан ivarne 19 August 2018 в 03:33
поделиться
  • 1
    В общем, вызов objc_msgSend as-is - это неправильная вещь. Вы должны применить его к соответствующему типу функции: typedef CFStringRef (*StringWithStringIMP)(id, SEL, CFStringRef); CFStringRef string = ((StringWithStringIMP)objc_msgSend)(objc_getClass("NSString"), sel_getUid("foo"), CFSTR("This is pointless.")); – Jens Ayton 5 May 2011 в 18:42
  • 2
    – Mr Aleph 5 May 2011 в 18:47
  • 3
    @MrAleph Вам нужно будет указать GCC, чтобы связать его с каркасом. Используйте -Xlinker -framework -Xlinker Foundation для этого. Вы должны сделать #include <Foundation/NSObjcRuntime.h>, чтобы получить текущий заголовок времени выполнения. – ughoavgfhw 5 May 2011 в 19:06
  • 4
    @MrAleph: Я настоятельно рекомендую не использовать objc_msgSend из файла .c. Просто используйте .m. Вы можете скомпилировать файл .m без XCode, используя gcc foo.m -o foo.o -framework Foundation -framework Cocoa и т. Д. – Yuji 6 May 2011 в 00:21

Objective-C - очень тонкая оболочка поверх C. Компилятор просто переводит

 [obj message:argument];

в C-вызов

 obj_msgSend(obj,@selector(message:),argument);

, и это он (где @selector(message:) - это волшебное кодирование, превращающее селектор (имя метода) в понятное для компьютера.)

Таким образом, с Objective-C и C с точки зрения компилятора нет большой разницы. Например, вы можете скомпилировать чистую программу C с компилятором Objective-C с точно таким же результатом, как и при компиляции с компилятором C.

Итак, самый простой способ «смешать» бит Objective-C с C - использовать расширение .m, чтобы компилятор использовал Objective-C.

Это не делает вашу программу внезапно очень Objective-C-y. Вы можете сохранить свою программу почти чистой C, с расширением .m. С помощью .m вы можете добавить несколько строк сообщений Objective-C без проблем.

4
ответ дан Yuji 19 August 2018 в 03:33
поделиться
  • 1
    Смогу ли я написать простой Makefile для компиляции и ссылки на это? – Mr Aleph 5 May 2011 в 18:51
Другие вопросы по тегам:

Похожие вопросы: