iOS 如何使用protocol Buffers

这篇具有很好参考价值的文章主要介绍了iOS 如何使用protocol Buffers。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Protocol buffers 是什么?

Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

Protocol buffers 是 Google 的语言中立、平台中立、可扩展的序列化结构化数据机制 - 类似于 XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码,使用各种语言轻松地在各种数据流中写入和读取结构化数据。

优点是更小更快;且对于数据扩展兼容性好,因为新增数据字段不影响旧字段解析;语义清晰且学习门槛低;

如果想详细了解可戳这:protobuf.dev

二、怎么使用

这里先介绍如何将.proto文件转换成.pbobjc.h和.pbobjc.m文件,然后导入到项目中,并实现pbData转pbModel,pbModel转pbData

Protocol buffers 开源并托管在Github,详见https://github.com/google/protobuf/

google提供了pb转oc的方法,但是没有提供swift的,apple这里做了swift的使用,详见https://github.com/apple/swift-protobuf

切记一定要安装3.0以上的版本,才支持OC,而且功能更好用;

推荐使用Homebrew来安装:

brew install automake 
brew install libtool 
brew install protobuf

安装后check一下,可输出当前安装版本

protoc --version

准备好这些后,

  1. 集成集成protobuf库
 pod 'Protobuf'
  1. 将.proto文件转换成.pbobjc.h和.pbobjc.m文件

先cd到.proto文件所在目录,然后执行如下操作,会在同级目录里生成.pbobjc.h和.pbobjc.m文件;

protoc --proto_path=. --objc_out=. xxxx.proto

注意: 这里生成的.pbobjc.h和.pbobjc.m文件无法直接导入项目中使用,你会发现文件中一堆MRC的代码;

参考如下:iOS 组件中设置文件支持MRC

至此,项目build是可以success的,接下来是如何使用

  1. pbModel转pbData

pb提供了一个data方法,可将使用上面步骤导入项目的pbobjc类也可以理解成model类转换成data

/**
 * Serializes the message to an NSData.
 *
 * If there is an error while generating the data, nil is returned.
 *
 * @note This value is not cached, so if you are using it repeatedly, cache
 *       it yourself.
 *
 * @note In DEBUG ONLY, the message is also checked for all required field,
 *       if one is missing, nil will be returned.
 *
 * @return The binary representation of the message.
 **/
- (nullable NSData *)data;

如下示例,xxpbModel就是代表一个pbobjc类

NSData *pbData = [xxpbModel data];
  1. pbData转pbModel

pb提供了一个init方法来将一个data映射成pbobjc类

/**
 * Initializes an instance by parsing the data. This method should be sent to
 * the generated message class that the data should be interpreted as. If
 * there is an error the method returns nil and the error is returned in
 * errorPtr (when provided).
 *
 * @note In DEBUG builds, the parsed message is checked to be sure all required
 *       fields were provided, and the parse will fail if some are missing.
 *
 * @note The errors returned are likely coming from the domain and codes listed
 *       at the top of this file and GPBCodedInputStream.h.
 *
 * @param data     The data to parse.
 * @param errorPtr An optional error pointer to fill in with a failure reason if
 *                 the data can not be parsed.
 *
 * @return An initialized instance of the generated class.
 **/
- (nullable instancetype)initWithData:(NSData *)data 
                                error:(NSError **)errorPtr;

如下示例,生成一个pbobjc类对象或者说一个pbModel
XXPbModel 是一个pbobjc类名文章来源地址https://www.toymoban.com/news/detail-804183.html

NSError *error;
XXPbModel *pbModel = [[XXPbModel alloc] initWithData:data error:&error];

到了这里,关于iOS 如何使用protocol Buffers的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MacM1(ARM)安装Protocol Buffers

    protobuf下载地址:https://github.com/protocolbuffers/protobuf/releases 在运行 ./autogen.sh 或 ./configure 命令时出现 \\\"No such file or directory\\\" 错误,是因为protobuf版本或构建方式的问题 3.21之前版本安装使用configure 如果没有 configure 需要先运行 ./autogen.sh 生成 配置 编译和安装 验证安装 安装位置

    2024年02月05日
    浏览(36)
  • 关于stm32f103 PA15,PA12,PB3 io配置过程中遇见的大坑

    1.四种输入 浮空输入 GPIO_Mode_IN_FLOATING 浮空输入使用过程中,io口的电平由输入端决定 模拟输入 GPIO_Mode_AIN 上拉输入 GPIO_Mode_IPU 上拉输入过程中,io口会接一个上拉电阻,默认电平为高电平。 下拉输入 GPIO_Mode_IPD 下拉输入过程中,io口会接一个下拉电阻,默认电平为低电平 2

    2024年02月14日
    浏览(29)
  • 【Java万花筒】选择最适合您的数据序列化格式:比较 Avro、Protocol Buffers、JSON、XML、MessagePack和BSON

    在当今数据驱动的世界中,高效地处理和传输数据变得至关重要。选择合适的数据序列化格式对于数据存储、通信和处理的性能至关重要。本文将介绍并比较几种常用的数据序列化格式,包括Apache Avro、Protocol Buffers、JSON、XML、MessagePack和BSON。通过了解它们的概述、特点、应用

    2024年02月20日
    浏览(42)
  • 关于iOS:如何使用SwiftUI调整图片大小?

    我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像? 我试图设置框架,但不起作用: 1 2 Image(room.thumbnailImage)     .frame(width: 32.0, height: 32.0) 在Image上应用任何大小修改之前,应使用.resizable()。 1 2 Image(room.thumbnailImage).resizable() .frame(width: 32.0, height: 3

    2024年02月05日
    浏览(31)
  • 如何在 iOS 上安装并使用 ONLYOFFICE 文档

    借助 iOS 版 文档 应用,您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件,查看和编辑现有文本文档、电子表格和演示文稿,创建新文档并对其进行整理,以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档,也可离线处理个人文件。 ONLYOFFICE 文档 iOS 版

    2024年02月12日
    浏览(37)
  • iOS pod EaseIMKit库如何放在本地使用

    在使用环信EaseIMKit库的时候,发现有些开发者需要改动库中的一些逻辑,或者有UI上的一些调整,如果直接去改pods里面的库,在之后的库版本升级会把之前修改过的代码覆盖掉,这个时候我们就需要pod指向本地的库,去比较好的实现本地组件化,也不会在pod install的时候造成

    2024年02月15日
    浏览(29)
  • 第八十一回:如何在IOS上使用三方包

    我们在前面章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍 如何在IOS上使用三方包 .闲话休提,让我们一起Talk Flutter吧。 我们在本章回中介绍的内容主要是指在Flutter中引入三方包后在IOS系统中编译并且运行。在前面章回中介绍了如何使用三方包相关的内容

    2024年02月16日
    浏览(30)
  • 如何使用IOS自动化测试工具UIAutomation

    这篇文章主要介绍了UIAutomation使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值 第一部分: 熟悉Instruments的UIAutomation. 第二部分: 控件的获取及操作 第三部分: 自定义自动化脚本 xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行内

    2024年02月03日
    浏览(33)
  • 如何判断当前是安卓/IOS/H5/Web使用环境

    在JavaScript中, navigator 对象用于获取浏览器的相关信息。它提供了一系列属性和方法,可以帮助我们了解浏览器的品牌、版本、用户代理等信息。 使用navigator.userAgent可判断当前是安卓或者ios或者H5或者web(设备系统): 判断当前操作系统 依据不同的场景需求,可采用 userA

    2024年01月18日
    浏览(27)
  • IOS系统mobileconfig的作用,mobileconfig文件如何使用,苹果超级签实现

    .mobileconfig是苹果系统配置描述文件,目前常用于苹果超级签获取设备UDID。 官方介绍: 配置描述⽂件是XML ⽂件,包含以下内容:设备安全策略、VPN 配置信息、Wi-Fi 设置、APN 设置、Exchange帐户设置、邮件设置以及允许 iPhone 和 iPod touch 与企业系统配合使⽤的证书。 “iPhone配置

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包