Cách thông thường để lưu trữ cấu trúc c trong an là NSArray
gì? Ưu nhược điểm, xử lý bộ nhớ?
Đáng chú ý, sự khác biệt giữa valueWithBytes
và valueWithPointer
- được nuôi bởi justin và catfish dưới đây.
Đây là một liên kết đến cuộc thảo luận của Apple valueWithBytes:objCType:
dành cho độc giả trong tương lai ...
Đối với một số tư duy bên và xem xét nhiều hơn về hiệu suất, Evgen đã đặt ra vấn đề sử dụng STL::vector
trong C ++ .
(Điều đó đặt ra một vấn đề thú vị: liệu có một thư viện c nhanh, không khác STL::vector
nhưng nhẹ hơn nhiều, cho phép "xử lý các mảng" ...?
Vì vậy, câu hỏi ban đầu ...
Ví dụ:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
Vậy: cách bình thường, hay nhất, thành ngữ để lưu trữ cấu trúc của chính mình như thế trong an NSArray
, và bạn xử lý trí nhớ trong thành ngữ đó như thế nào?
Xin lưu ý rằng tôi đang đặc biệt tìm kiếm thành ngữ thông thường để lưu trữ cấu trúc. Tất nhiên, người ta có thể tránh vấn đề này bằng cách tạo ra một lớp nhỏ mới. Tuy nhiên, tôi muốn biết thành ngữ thông thường thực sự đặt cấu trúc trong một mảng như thế nào, cảm ơn.
BTW đây là cách tiếp cận NSData có lẽ là? không tốt nhất ...
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 như một điểm tham khảo và cảm ơn Jarret Hardie, đây là cách lưu trữ CGPoints
và tương tự trong một NSArray
:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(xem Làm cách nào để thêm các đối tượng CGPoint vào NSArray một cách dễ dàng? )