2009-09-14 17 views
5

मैं एक छोटे से नींव उपकरण परीक्षण (ऑब्जेक्टिव-सी) है कि मैं के साथ खेल रहा हूँ है और मैं कुछ सवाल है ...एनएसएमयूटेबलएरे में स्ट्रिंग ऑब्जेक्ट्स जोड़ना?

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    int planetLoop; 
    NSString *tempString; 
    NSMutableArray *planetArray = [[NSMutableArray alloc] init]; 

    NSLog(@"STRING ARRAY ... Start"); 
    for(planetLoop=0; planetLoop<10; planetLoop++) { 
     tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1]; 
     NSLog(@"Planet_%03d", planetLoop+1); 
     [planetArray addObject:tempString]; 
    } 

    [planetArray release]; 
    [pool drain]; 
    return 0; 
} 

सबसे पहले, आम तौर पर मैं एक सरणी में जोड़ने के बाद एक वस्तु जारी है, लेकिन क्या मैं यह सोचने में सही हूं कि वर्तमान में मेरे पास क्या सही है क्योंकि "tempString" एक स्ट्रिंग अक्षर है, और इस तरह आवंटित या रिलीज़ करने की आवश्यकता नहीं है?

दूसरा, जब मैं इसे चलाता हूं (निष्पादन से पहले) मुझे निम्न त्रुटि मिलती है "अज्ञात लोड कमांड 0x80000022 पढ़ने में असमर्थ" अगर यह मेरे कोड में कोई समस्या है? Google पर खोज से ऐसा लगता है कि यह xCode 3.1.2 में एक बग हो सकता है, किसी के पास कोई विचार है?

अंत में कुछ भी मैं गलत कर रहा हूँ, विचार "Planet_010"

संपादित करने के लिए के माध्यम से 10 स्ट्रिंग "Planet_001" के साथ एक सरणी को भरने के लिए है: आह, मैं देख रहा हूँ, "= [NSString" बिट की क्योंकि thats यानी

// Autoreleased object 
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1]; 
// String literal 
tempString = @"Planet_"; 

बहुत धन्यवाद, बहुत -gary-

उत्तर

5

tempString वास्तव में एक नहीं है शाब्दिक स्ट्रिंग। @"Planet_%03d" एक स्ट्रिंग अक्षर है। tempString एक ऑटोरेलेज्ड ऑब्जेक्ट है, जिसका अर्थ है कि एनएसएयूटोरिलीपूल को निकाला जाने पर इसे रिहा कर दिया जाएगा। असल में, स्मृति पहले से ही प्रबंधित है और आपको कुछ भी करने की ज़रूरत नहीं है।

नियम है: आप new, alloc, copy या retain एक वस्तु है, तो आप release यह करने के लिए है हैं। अन्यथा, स्मृति पहले से ही एक ऑटोरेलीज द्वारा प्रबंधित की जा चुकी है।

इसके अलावा, आप pool को रिलीज़ करना भूल गए। इसके अलावा, यह ठीक लग रहा है।

+1

वह पूल जारी करता है: [पूल नाली] –

+0

धन्यवाद दोस्तों, मुझे लगता है कि अब क्या हो रहा है, ऊपर वर्णित छोटे संपादन ... – fuzzygoat

+0

@ क्रिस आप सही हैं। मुझे पता नहीं था कि 'नाली' एक 'रिलीज' करता है। –

1

एक "अज्ञात लोड आदेश 0x80000022 पढ़ने में असमर्थ" त्रुटि के लिए संभावित कारण सराहना डेवलपर्स अपग्रेड किए बिना कि मैं हिम तेंदुए में अपग्रेड किया है प्रतीत होता है एक ही समय में उपकरण। ऐसा लगता है कि 10.6 वातावरण में संकलन करने के लिए 10.5 संस्करण को एक्सकोड में उपयोग करने का प्रयास करके त्रुटि हो सकती है। मैं कल इस पर देख लूंगा।

एक्सकोड 3.2 अब हिम तेंदुए (मैक ओएस एक्स 10.6) रिलीज में उपलब्ध है। हिम तेंदुए को स्थापित करने के बाद, एक्सकोड उपकरण डिस्क छवि से इसे अलग से स्थापित करके एक्सकोड 3.2 में अपग्रेड करें। आप इसे एक्सकोड के पूर्व संस्करणों पर स्थापित कर सकते हैं, या इंस्टॉल करने से पहले उन्हें अलग कर सकते हैं।

पुनश्च: जब मैं "अज्ञात लोड आदेश 0x80000022 पढ़ने में असमर्थ" त्रुटि मैं Xcode के साथ OSX 10.6.1 चल रहा था मिल गया 3.1.2

चियर्स -gary-

+0

अपने उपकरणों ओएस संस्करण उपयोग कर रहे के साथ सिंक में नहीं हैं, तो है कि पहले ठीक करें। यह एक ज्ञात अस्थिर विन्यास है। – NSResponder

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