博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C 使用 C++类
阅读量:5041 次
发布时间:2019-06-12

本文共 1756 字,大约阅读时间需要 5 分钟。

看了同学的《》博文,我也有些想法也记录一下,方便今后学习

1.Objective-C / C++ /C 深度混合不是一个好的选择,易容出错,也不好维护,当在Objective-C代码中使用C++类时,我们会使用等价的Objective-C类型和函数将C++代码封装(wrap)起来。

2.Objective-C头文件中不要引用C++的头文件,因为Objective-C中没有class这个关键字. 编译器会报Unknown type name 'class'; did you mean 'Class'?错误。

下面说一个列子方便理解

//PlayerWindowController.h  Objective-ct头文件

#import <Cocoa/Cocoa.h>

@interface PlayerWindowController : NSWindowController

{

@private

void *_player; //定义一个void *

}

- (BOOL) playURL:(NSURL *)url;

@end

 

//PlayerWindowController.mm  实现

#import "PlayerWindowController.h"

#include <libkern/OSAtomic.h>   //c++ 头文件

#include <AudioPlayer.h>          //c++类头文件

#include <AudioDecoder.h>       //c++类头文件

 

#define PLAYER (static_cast<AudioPlayer *>(_player))  

 

static void decodingStarted(void *context, const AudioDecoder *decoder)

{

   [(PlayerWindowController *)context decodingStarted:decoder];

}

 

static void renderingStarted(void *context, const AudioDecoder *decoder)

{

[(PlayerWindowController *)context renderingStarted:decoder];

}

 

static void renderingFinished(void *context, const AudioDecoder *decoder)

{

   [(PlayerWindowController *)context renderingFinished:decoder];

}

 

@implementation PlayerWindowController

- (id) init

{

     if(nil == (self = [super initWithWindowNibName:@"PlayerWindow"])) {

     [self release];

     return nil;

     }

    _player = new AudioPlayer();  

    return self;

}

 

- (BOOL) playURL:(NSURL *)url

     AudioDecoder *decoder = AudioDecoder::CreateDecoderForURL(reinterpret_cast<CFURLRef>(url));

    if(nullptr == decoder)

    return NO;

 

    PLAYER->Stop();

 

    //注册播放器开始/结束消息,方便UI界面更新

    decoder->SetDecodingStartedCallback(decodingStarted, self);

    decoder->SetRenderingStartedCallback(renderingStarted, self);

    decoder->SetRenderingFinishedCallback(renderingFinished, self); 

    return YES;

}

 

转载于:https://www.cnblogs.com/zhu917/p/5257633.html

你可能感兴趣的文章
Spring注解之@Lazy注解,源码分析和总结
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>