2010-08-19 5 views
14

मैं उद्देश्य-सी के लिए नया हूं, इसलिए कृपया मुझे बहुत अधिक न्याय न करें। मैं सोच रहा था: क्या सी ++ एसटीएल जोड़ी कंटेनर का समतुल्य है जिसका उद्देश्य मैं उद्देश्य-सी में उपयोग कर सकता हूं?उद्देश्य-सी में सी ++ एसटीएल कंटेनर "जोड़ी <T1, T2>" समकक्ष?

मैं एक सरणी बनाना चाहता हूं जिसमें एनएसबीएल से जुड़े एनएसआईएनटेगर शामिल हैं। मुझे पता है कि मैं प्रत्येक प्रविष्टि के साथ एनएस डिक्शनरी के साथ एक सरणी का उपयोग कर सकता हूं, लेकिन मुझे लगता है कि यह थोड़ा अधिक है।

कोई भी विचार?

धन्यवाद।

उत्तर

7

आप उद्देश्य-सी ++ में एसटीएल का उपयोग कर सकते हैं। आपको बस इतना करना है कि आपकी .m फ़ाइल का विस्तार .mm पर बदलें और मैं आपको #include के बजाय #import का उपयोग करने की सलाह दूंगा। इस तरह आप अपनी जोड़ी एसटीएल कंटेनर का उपयोग कर सकते हैं।

+1

बस ध्यान रखें कि एसटीएल कंटेनर 'retain' और' release' वस्तुओं नहीं है। – dreamlax

16

आप अपनी खुद की डेटा संरचना वस्तु लिख सकते हैं - इस तरह के एक सरल मामले के लिए, यह बहुत आसान होगा:

@interface Pair : NSObject 
{ 
    NSInteger integer; 
    BOOL  boolean; 
} 
@property (nonatomic, assign) integer; 
@property (nonatomic, assign) boolean; 
@end 

और उससे मिलते-जुलते कार्यान्वयन, तो आप NSArray समस्या मुक्त में अपनी Pair वस्तुओं चिपके रहते हैं।

+4

@ मार्टिन, बिल्कुल सही। लेकिन ओपी इंगित करता है कि वह एक विशिष्ट जोड़ी चाहता है। यहां 'आईडी' के साथ दो गुणों को प्रतिस्थापित करने से काम पूरा हो जाएगा। –

-1

NSNumber पर एक जोड़ी श्रेणी संबद्ध वस्तुओं, नीचे दिए गए कोड की तरह कुछ (अपरीक्षित, iOS4 आवश्यकता हो सकती है के रूप में मुझे यकीन है कि जब जुड़ी वस्तुएं शुरू किए गए थे नहीं कर रहा हूँ) का उपयोग करता है के बारे में कैसे।

#import <objc/runtime.h> 

@implementation NSNumber(Pair) 

#define PAIR_KEY 'p' 

- (NSNumber *) pairNumber:(NSNumber *)second 
{ 
    char secondKey = PAIR_KEY; 
    objc_setAssociatedObject(self, &secondKey, second, OBJC_ASSOCIATION_RETAIN); 
    return self; 
} 

- (NSNumber *) pairedNumber 
{ 
    char secondKey = PAIR_KEY; 
    NSNumber *associatedObject = (NSNumber *)objc_getAssociatedObject(self, &secondKey);  
    return associatedObject; 
} 

@end 

तुम इतनी है कि यह प्रयोग करेंगे:

BOOL myBool = NO; 

NSNumber *storedBool = [NSNumber numberWithBool:myBool]; 

[myOtherNumber pairNumber:storedBool]; 

और यह बाहर निकलने के लिए:

NSNumber *boolNumber = [myOtherNumber pairedNumber]; 
1

गुमनाम struct और struct शाब्दिक का उपयोग करके आप

की तरह कुछ करने के लिए सक्षम हो सकता है
NSValue * v = [NSValue valueWithBytes:(struct {NSInteger i; bool b;}){i,b} objCType:(struct {NSInteger i; bool b;})]; 

और फिर टी ओ पढ़ें,

struct {NSInteger i; bool b;} foo; 
[v getValue:&foo]; 

यदि आप अपनी संरचना का नाम देते हैं तो यह थोड़ा क्लीनर है।

संबंधित मुद्दे