Cách thông thường để lưu trữ cấu trúc c trong an là NSArraygì? Ưu nhược điểm, xử lý bộ nhớ?
Đáng chú ý, sự khác biệt giữa valueWithBytesvà 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::vectortrong 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::vectornhư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ữ CGPointsvà 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? )