• iOS IM开发准备工作(二)protobuf-objc安装及使用


      Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。你在http://code.google.com/p/protobuf/downloads/list 上可以下载 Protobuf 的源代码(然而需要翻墙访问)。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。也就是说OC版本的 Google本身没有提供,有哥们说,iOS可以直接用C++版本的,不过作为一个0警告的追求者,我不使用它。

      至于为什么用protobuf,说傻一点,boss让使用的。说高端一点,传输效率高,简洁。其实就是相同的流量可以传输更多的数据。据说wechat也是用的这个。

      protobuf-objc在Github上有几个开源的项目,我用的是这个https://github.com/alexeyxo/protobuf-objc。它里面的Readme写的还是很不好理解的,至少我进过坑。然后我发现了他 http://protobuf.io/#objc,这里面写的简洁,字体也比较舒服(然而这里面的它没有及时更新,醉了)

    安装下载

    第一种是用命令行下载源码安装插件,我喜欢这样的。

    第一行  安装homebrew 这玩意还是比较有用的,安装一个无妨  如果这行报错,看看网络好不好;截图的地址错了,应为:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    第二行  安装automake 下载完源码你会看到里面有makefile的,懂得人自然就懂了,不懂得就百度一下咯

    第三行  安装libtool  一个通用库支持脚本,就看做GCC吧,还是为了make。不懂的还是问度娘

    第四行  安装protobuf 

    第五行  这一行命令你最好敲一下,不然你会后悔的 后面括号里面的就别输入命令行了

    第六行  这个比较费时间;截图的地址又改了,应为:git clone https://github.com/alexeyxo/protobuf-objc.git

    第七行  这是编译指令,需要你进入你根目录里面 下载好的那个protobuf-objc文件夹里面去执行,截图又是错的,(我也是醉了) 应为:./scripts/build.sh

    第八行  这一行是让你 把根目录下那个protobuf-objc文件夹里面的src目录下的runtime 里面的 这个ProtocolBuffers.xcodeproj项目 直接拖到你的项目里面去,(copy items) 

     

    第二种CocoaPods不适合我这种直接的人+_+。。。

    第一个方法的1到7 还是要的 后面3行 用pods的如果你不懂的话,面壁思过吧。。。

    第三种 其实我发现的更直接的方法,在http://protobuf.io/#objc直接下载最顶上的压缩包

    我不推荐这么做。如果你这么做失败了,那你还是前两种吧。。。

    编译.proto

      安装好的,毕竟只是工具,用起来才行。proto的语法我就不说了,太多。我这里假设有人给了你.proto文件,现在你需要把他转成objc文件。

    首先打开终端 cd到Desktop,这样便于观察操作结果;

    然后输入这行 protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out=“./pbDir” 

      红色的是你的proto文件 我默认放在桌面了;蓝色的是你生成的文件要存放的目录  其中./是指当前目录下  pbDir  是我新建的文件夹 用来存放生成的objc文件的

      每个proto文件会生成两个文件 一个.h  一个.m

    最后将你的生成的文件 拖到你的项目里面去 然后就可以用了。

    简说proto的Message

      proto文件里面每一个包都是一个message。我写一个比较全的例子,说明一下。

     1 message MTMsg 
     2 {
     3     enum Type
     4     {
     5         ax = 0;
     6         ay = 1;
     7         aa = 2;
     8         ab = 3;
     9     }
    10     required Type ntype = 1;
    11     repeated TKSMsg objs = 2 ;
    12     optional string name = 3 ;
    13 }    

      可以看出,这一个message里面 有一个枚举,是不是很神奇。再看第一个变量 它是一个枚举类型的字段,前面的required表示它是必填字段;第二个变量,是一个自定义的TKSMsg(它也是一个message),前面的repeated表示他是一个数组类型;最后一个是一个字符串string,optional表示他是可选字段。

      编译出来后,这段message会变得很大,我就不贴出来了。

      编译后,你可以用XXXBuilder 来alloc出来一个实例a,对这个a的属性赋值。然后用这个a.build 给出一个XXX的实例b。这个b可以用来传输。

  • 相关阅读:
    (教程)怎么避免拼多多比价订单行为
    Ubuntu下搭建apache2+GGI环境
    搭建k8s
    我的2021年总结
    工作三年的一些感悟
    xshell6+xftp6免安装破解版
    centos7启动docker容器时提示Error response from daemon: Unknown runtime specified dockerrunc
    解决一个C#中定时任务被阻塞问题
    工程中实际问题解决两例——基于C#
    解决一次gitlab因异常关机导致启动失败
  • 原文地址:https://www.cnblogs.com/akforsure/p/5190187.html
Copyright © 2020-2023  润新知