एक में सी-संरचनाओं को स्टोर करने का सामान्य तरीका क्या है NSArray? फायदे, नुकसान, मेमोरी हैंडलिंग?
विशेष रूप से, क्या अंतर है valueWithBytesऔर valueWithPointer - जस्टिन और कैटफ़िश द्वारा नीचे उठाया गया है।
यहांvalueWithBytes:objCType: जानिए भविष्य के पाठकों के लिए Apple की चर्चा की एक कड़ी ...
कुछ पार्श्व सोच और प्रदर्शन में अधिक देखने के लिए, एवेरियन ने C ++STL::vector में उपयोग करने का मुद्दा उठाया है ।
(यह एक दिलचस्प मुद्दा उठाता है: क्या एक तेज सी लाइब्रेरी है, STL::vectorलेकिन इसके विपरीत बहुत हल्का नहीं है, जो न्यूनतम "व्यवस्थित सरणियों के सुव्यवस्थित संचालन" की अनुमति देता है ...? "
तो मूल प्रश्न ...
उदाहरण के लिए:
typedef struct _Megapoint {
float w,x,y,z;
} Megapoint;
तो: क्या सामान्य, सबसे अच्छा, मुहावरेदार तरीका है कि एक में अपनी खुद की संरचना को स्टोर करने के लिए NSArrayऔर कैसे आप उस मुहावरे में स्मृति को संभालते हैं?
कृपया ध्यान दें कि मैं विशेष रूप से सामान्य मुहावरों की तलाश कर रहा हूं, जो संरचना को संग्रहीत करते हैं। बेशक, कोई नई छोटी कक्षा बनाकर इस मुद्दे से बच सकता है। हालाँकि मैं जानना चाहता हूँ कि वास्तव में किसी सरणी में स्ट्रक्चर्स लगाने के लिए सामान्य मुहावरा कैसा है, धन्यवाद।
BTW यहाँ NSData दृष्टिकोण जो शायद है? सबसे अच्छा नहीं ...
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 संदर्भ के रूप में और Jarret हार्डी के लिए धन्यवाद, यहाँ कैसे स्टोर करने के लिए CGPointsऔर एक में समान है NSArray:
NSArray *points = [NSArray arrayWithObjects:
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
[NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
nil];
(देखें कि कैसे मैं एक आसान तरीके से NSArray में CGPoint ऑब्जेक्ट्स जोड़ सकता हूँ? )