简介:
protobuf 即 google protocol buffer 是一种数据封装格式协议;
比如其他经常用的xml,json等格式;protobuf的优势是效率高,同样的一份数据使用protobuf存储的时候更小,更加方便;
官网:
https://developers.google.com/protocol-buffers/
https://github.com/google/protobuf
在iOS上的使用
目前最新的版本需要xcode7.0+,以及不支持ARC
1. 从github上面下载全部代码
2. 在mac上编译protobuf 可能还需要 autoconf,libtool,automake,
请先在mac上安装这三个依赖库;使用brew安装就行
brew install autoconf
brew install libtool
brew install automake
automake的安装可能会连接到被墙的网站,这时从网上找一份谷歌host即可;
3. 解压下载的 protobuf-master, 并打开终端入 /protobuf-master/objectivec/DevTools/ 目录
执行 sudo sh full_mac_build.sh
等待编译完成,如果遇到错误可能是上面3个依赖或是别的依赖没有安装,排查一下就好
4. 安装完成之后,即会在 protobuf-master/src/ 目录下生成 protoc 可执行程序
以后我们需要用该生成把 .proto文件生成对应平台的代码;
5. 如下安装protobuf定义的proto3语法生成一份测试用的数据格式,Person.proto文件
syntax = "proto3"; message Person { string name = 1; int32 age = 2; string address = 3; }
6. 使用 protoc 将 .proto文件 生成对应平台的代码;这里生成oc的代码
如下protoc命令的帮助
Parse PROTO_FILES and generate output based on the options given: -IPATH, --proto_path=PATH Specify the directory in which to search for imports. May be specified multiple times; directories will be searched in order. If not given, the current working directory is used. --version Show version info and exit. -h, --help Show this text and exit. --encode=MESSAGE_TYPE Read a text-format message of the given type from standard input and write it in binary to standard output. The message type must be defined in PROTO_FILES or their imports. --decode=MESSAGE_TYPE Read a binary message of the given type from standard input and write it in text format to standard output. The message type must be defined in PROTO_FILES or their imports. --decode_raw Read an arbitrary protocol message from standard input and write the raw tag/value pairs in text format to standard output. No PROTO_FILES should be given when using this flag. -oFILE, Writes a FileDescriptorSet (a protocol buffer, --descriptor_set_out=FILE defined in descriptor.proto) containing all of the input files to FILE. --include_imports When using --descriptor_set_out, also include all dependencies of the input files in the set, so that the set is self-contained. --include_source_info When using --descriptor_set_out, do not strip SourceCodeInfo from the FileDescriptorProto. This results in vastly larger descriptors that include information about the original location of each decl in the source file as well as surrounding comments. --dependency_out=FILE Write a dependency output file in the format expected by make. This writes the transitive set of input file paths to FILE --error_format=FORMAT Set the format in which to print errors. FORMAT may be 'gcc' (the default) or 'msvs' (Microsoft Visual Studio format). --print_free_field_numbers Print the free field numbers of the messages defined in the given proto files. Groups share the same field number space with the parent message. Extension ranges are counted as occupied fields numbers. --plugin=EXECUTABLE Specifies a plugin executable to use. Normally, protoc searches the PATH for plugins, but you may specify additional executables not in the path using this flag. Additionally, EXECUTABLE may be of the form NAME=PATH, in which case the given plugin name is mapped to the given executable even if the executable's own name differs. --cpp_out=OUT_DIR Generate C++ header and source. --csharp_out=OUT_DIR Generate C# source file. --java_out=OUT_DIR Generate Java source file. --javanano_out=OUT_DIR Generate Java Nano source file. --js_out=OUT_DIR Generate JavaScript source. --objc_out=OUT_DIR Generate Objective C header and source. --php_out=OUT_DIR Generate PHP source file. --python_out=OUT_DIR Generate Python source file. --ruby_out=OUT_DIR Generate Ruby source file.