Cách dễ nhất để tạo một mảng cấu trúc trong Cocoa là gì?Cách dễ nhất để tạo một mảng cấu trúc là gì?
Trả lời
Nếu bạn muốn sử dụng một NSArray bạn sẽ cần phải hộp lên struct của bạn. Bạn có thể sử dụng lớp NSValue để mã hóa chúng.
Something như thế này để mã hóa:
struct foo {
int bar;
};
struct foo foobar;
foobar.bar = 3;
NSValue *boxedFoobar = [NSValue valueWithBytes:&foobar objCType:@encode(struct foo)];
Và sau đó để có được nó lại ra:
struct foo newFoobar;
if (strcmp([boxedFoobar objCType], @encode(struct foo)) == 0)
[boxedFoobar getValue:&newFoobar];
Nếu bạn đang okay với một mảng C cũ thường xuyên:
struct foo{
int bar;
};
int main (int argc, const char * argv[]) {
struct foo foobar[3];
foobar[0].bar = 7;
}
Nếu bạn muốn một NSArray, bạn sẽ cần một đối tượng wrapper. Hầu hết các nguyên thủy sử dụng NSNumber, nhưng điều đó có thể không được áp dụng cho cấu trúc của bạn. Một wrapper sẽ không phải là rất khó để viết, mặc dù loại đánh bại mục đích của việc sử dụng một cấu trúc!
Chỉnh sửa: Đây là điều tôi chưa làm nhưng chỉ nghĩ đến. Nếu bạn nghĩ về nó, một NSDictionary về cơ bản là một cấu trúc cho các đối tượng. Các khóa của bạn có thể là tên của các thành phần cấu trúc như NSStrings và các giá trị của bạn có thể là kiểu dữ liệu tương ứng được bao bọc trong trình bao bọc Cocoa áp dụng. Sau đó, chỉ cần đặt những bộ từ điển này trong một NSArray.
Tôi đoán ý chính là bạn có nhiều tùy chọn. Nếu tôi là bạn tôi sẽ làm một số thử nghiệm và xem những gì hoạt động tốt nhất.
Hoặc tự động phân bổ:
struct foo {
int bar;
};
int main (int argc, const char * argv[]) {
struct foo *foobar = malloc(sizeof(struct foo) * 3);
foobar[0].bar = 7; // or foobar->bar = 7;
free(foobar);
}
Liệu nó cần phải là một struct? Nó thường tốt hơn để làm cho nó một đối tượng nếu bạn có thể. Sau đó, bạn có thể sử dụng những thứ như KVC và Bindings với nó.
Hey Peter, ngay bây giờ tôi không nghĩ rằng tôi cần những người đó, nhưng đó vẫn là một chủ đề mà tôi quan tâm. Tôi vừa mở một câu hỏi cụ thể: http://stackoverflow.com/questions/393662 –
Dễ sử dụng lớp hơn, nhưng nếu bạn cần làm việc với các cấu trúc C và c mục tiêu như CGRect hoặc các cấu trúc khác. Tôi đã cố gắng sử dụng NSValue, nhưng nó hoạt động kỳ lạ ...:
CGRect rect =CGRectMake(20,220,280,30);
NSValue* rectValue = [NSValue valueWithCGRect:rect];
NSArray *params1;
params1= [NSArray arrayWithObjects:rectValue,nil];
Nhưng, tôi có thể nhận được giá trị CGRect chỉ như:
CGRect cgr = [[params1 objectAtIndex:0] CGRectValue];
Khi tôi sử dụng này:
id currentVal = [params1 objectAtIndex:0];
void* buffer;
buffer=[currentVal pointerValue];
nó gây ra lỗi ...
vấn đề được giải quyết here
- 1. Cách dễ nhất để duy trì bản đồ/cấu trúc trong Clojure là gì?
- 2. tạo một mảng cấu trúc trong C++
- 3. Cách khởi tạo một mảng cấu trúc trong C++?
- 4. Cách dễ nhất để làm 'là' trong Java là gì?
- 5. unmarshal một mảng JSON của cấu trúc không đồng nhất
- 6. Làm thế nào để vượt qua một mảng cấu trúc đến một mảng cấu trúc?
- 7. Cách thay thế dễ nhất cho một mảng chung trong Java là gì?
- 8. Cách dễ nhất để implode() một mảng hai chiều?
- 9. Cấu trúc giải pháp MVC3 tốt nhất là gì?
- 10. Cách dễ nhất và nhỏ gọn nhất để tạo một số điện thoại IE2umerhoặc ICollection <T> là gì?
- 11. Cách dễ nhất để xử lý mảng kết hợp trong C# là gì?
- 12. C#: cách dễ nhất để trừ thời gian là gì?
- 13. Cách hiệu quả nhất để so sánh cấu trúc C++ với C# là gì?
- 14. C - khởi tạo mảng các cấu trúc
- 15. Cấu trúc của tệp MIDI là gì?
- 16. Mảng JavaScript/Cấu trúc
- 17. Ngữ nghĩa cấu trúc dễ bay hơi
- 18. Trong SharePoint, cách dễ nhất để tạo tệp danh sách tùy chỉnh 'schema.xml' là gì?
- 19. Cách dễ nhất để tạo số ngẫu nhiên bán trong C# là gì?
- 20. Cách dễ nhất để tạo phần mở rộng C tùy chọn cho gói python là gì?
- 21. Cách tốt nhất để tạo bản sao sâu của cấu trúc dữ liệu trong Perl là gì?
- 22. Cách tốt nhất để tạo mảng phụ từ mảng hiện có trong C++ là gì?
- 23. Cách dễ nhất để buộc Idea tạo tệp R.Java là gì?
- 24. Cách dễ nhất để tạo HTML, di chuột qua đầu công cụ là gì?
- 25. Cách tốt nhất để tạo một mảng thưa thớt trong C++ là gì?
- 26. Cách tốt nhất để tạo một mảng chỉ đọc trong C# là gì?
- 27. Cách dễ nhất để trích xuất dữ liệu có cấu trúc theo chương trình từ một loạt các trang web là gì?
- 28. Cách dễ nhất để sử dụng khung công tác ORM cho PHP là gì?
- 29. Hướng dẫn đơn giản để tạo cấu trúc gói Python và trứng là gì?
- 30. Khởi tạo một mảng bên trong một cấu trúc từ một mảng trong C++
Một gợi ý hay, mặc dù có một cú đánh đấm hiệu suất và unboxing. Nó không khủng khiếp, nhưng đáng chú ý nếu bạn cần tốc độ. –