Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通知来自c++;到iOS应用程序中的UI_C++_Ios_Objective C_Audio - Fatal编程技术网

C++ 通知来自c++;到iOS应用程序中的UI

C++ 通知来自c++;到iOS应用程序中的UI,c++,ios,objective-c,audio,C++,Ios,Objective C,Audio,我正在使用音频单元在iOS 7上开发一个音频生成器,并在cpp文件中呈现示例。我的问题是,在渲染期间,我需要通知输出量到C++中计算的UI。 我怎样才能做到这一点?如果我可以从cpp文件中调用objective C方法,那就足够了。事实上,这里有两个问题需要解决: 从C++到Objul-C 跨越从CoreAudio渲染线程到UI线程的线程边界 从C++到Objto-C是简单的:编译你的C++文件作为Objto-C++(用重命名.mm 一旦这样做,C++类可以包含ObjyE-C对象指针成员,

我正在使用音频单元在iOS 7上开发一个音频生成器,并在cpp文件中呈现示例。我的问题是,在渲染期间,我需要通知输出量到C++中计算的UI。
我怎样才能做到这一点?如果我可以从cpp文件中调用objective C方法,那就足够了。

事实上,这里有两个问题需要解决:

    从C++到Objul-C
  • 跨越从CoreAudio渲染线程到UI线程的线程边界

从C++到Objto-C是简单的:编译你的C++文件作为Objto-C++(用<代码>重命名.mm

一旦这样做,C++类可以包含ObjyE-C对象指针成员,方法实现可以向Objtovi-C对象发送消息。相反,ObjaveC++对象可以管理C++对象并调用它们。 要跨越线程边界,请使用Grand Central Dispatch

@interface ObjectiveCBar;

- (void) onVolumeEvent:(float) volume;

@end


class Foo
{
   void notifyUI(float volume)
   {
       dispatch_async(dispatch_get_main_queue(), ^
            {        
                [objectiveCObject onVolumeEvent:volume];
            });
   }

   ObjectiveCBar     *objectiveCObject;
}

<>你也可以使用代码来取消C++和Objul-C部分。为此,您需要在队列中传递Objective-C对象

您可以将代码编译为Objective-C++-最简单的方法是将.cpp重命名为.mm。然后它将正确编译,你可以(在大多数情况下)混合Objto-C和C++,但是你喜欢。谢谢你的快速回复!这会使cpp代码有所不同吗?我的意思是,如果我将cpp代码编译为Objective-C++,那么代码执行可能会慢一些。。。Objul-C++与C++一样快吗?这和objective-c和c的关系是一样的。谢谢你的回答。我只想问最后一个问题:如果我将cpp重命名为files,而不更改内容,它会改变代码的性能吗?我的意思是换分机。声音的生成,以及我如何创建向量,都是用C++完成的,而且工作得很好。这样做没有性能问题,尽管从架构的角度来看,分离关注点始终是一个好主意。你可能想结束一个架构,它是一个C++ -ObjuleC++Objule-C三明治。