sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

構造体をNSArrayとかのコレクションクラスに格納したい

構造体をコレクションに放り込もうとしてはたと困りました。

対象となる構造体は保存/読み込みをブロックでごっそりやってたりして、クラスにすれば良いのはわかっているのですが、もういろいろいじりたくないなと。 (その辺りのヘルパーメソッドをちゃんと書けば済む話なのですが…)

さてどうしようかとちょっと考えて、バイト列を扱うのにNSData系がとても便利だったのを思い出し、構造体もバイト列だし、NSDataのオブジェクトにして放り込んでやればいいかなということにしてみました。

typedef struct {
    int16_t yaw;
    int16_t pitch;
    int16_t roll;
} MyData;

NSMutabuleArray* list = [NSMutableArray array];
MyData mydata;
mydata.yaw = 12;
mydata.pitch = 34;
mydata.aroll = 56;

こんな構造体の値を放り込むのはこう

NSData* tmpdata = [NSData dataWithBytes:&mydata length:sizeof(MyData)];
[list addObject:tmpdata];

取り出す時もこれだけ

for(NSData* tmpdata in list){
    MyData* mydata = (MyData*)tmpdata.bytes;
}

と、ARCでメモリ管理も楽チンだし、悪くないと思うのですが、やっぱりちゃんとクラスにした方がいいのかなぁ…実際のところどうなんでしょうか?