Apa cara yang biasa untuk menyimpan c-structure di sebuah NSArray
? Keuntungan, kerugian, penanganan memori?
Khususnya, apa perbedaan antara valueWithBytes
dan valueWithPointer
- dibesarkan oleh justin dan lele di bawah ini.
Berikut tautan ke diskusi Apple valueWithBytes:objCType:
untuk pembaca di masa mendatang ...
Untuk beberapa pemikiran lateral dan melihat lebih banyak pada kinerja, Evgen telah mengangkat masalah penggunaan STL::vector
dalam C ++ .
(Itu menimbulkan masalah yang menarik: apakah ada pustaka c yang cepat, tidak seperti STL::vector
tetapi jauh lebih ringan, yang memungkinkan "penanganan larik yang rapi" minimal ...?)
Jadi pertanyaan aslinya ...
Sebagai contoh:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Jadi: apa cara normal, terbaik, idiomatik untuk menyimpan struktur sendiri seperti itu dalam sebuah NSArray
, dan bagaimana Anda menangani memori dalam idiom itu?
Harap dicatat bahwa saya secara khusus mencari idiom biasa untuk menyimpan struct. Tentu saja, seseorang dapat menghindari masalah ini dengan membuat kelas kecil yang baru. Namun saya ingin tahu bagaimana idiom biasa untuk benar-benar meletakkan struct dalam array, terima kasih.
BTW inilah pendekatan NSData yang mungkin? bukan yang terbaik ...
Megapoint p;
NSArray *a = [NSArray arrayWithObjects:
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
[NSData dataWithBytes:&p length:sizeof(Megapoint)],
nil];
BTW sebagai rujukan dan terima kasih kepada Jarret Hardie, berikut cara menyimpan CGPoints
dan sejenisnya di NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(lihat Bagaimana cara menambahkan objek CGPoint ke NSArray dengan cara mudah? )