【问题标题】:Protocol Buffer for Objective-CObjective-C 的协议缓冲区
【发布时间】:2011-09-12 03:18:42
【问题描述】:

我正在使用这个库:

PB for ObjC http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers.

问题是我找不到修改 PB 对象的 API,比如设置对象的字段。

似乎要修改像 PBData:PBGeneratedMessage 这样的对象,我必须调用三个 API 之一:

- (PBData_Builder*) builder;
+ (PBData_Builder*) builder;
+ (PBData_Builder*) builderWithPrototype:(PBData*) prototype;

其中任何一个都只是创建一个新的而不修改现有的。 是否有任何 API 像 PB for C++:

PBData* mutable_data(); 

所以我可以修改现有的。

有什么想法吗?谢谢!

【问题讨论】:

    标签: objective-c protocol-buffers


    【解决方案1】:

    PBData 类是只读的。要使用所需的值创建 PBData,只需使用构建器变体。假设你有这个定义:

    message Point {
      required float latitude = 1;
      required float longitude = 2;
      required float altitude = 3;
    }
    

    然后在你的代码中你会做这样的事情:

    Point_Builder* pointBuilder = [Point builder];
    pointBuilder.latitude = ...;
    pointBuilder.longitude = ...;
    pointBuilder.altitude = ...;
    ProtoPoint* point = [pointBuilder build];
    

    【讨论】:

    • 谢谢,你是对的。但我最终还是回到了 C++ 版本的 PB,它更快(我分析的 10 倍)。