2012-01-03 15 views
13

मैंने देखा है Xcode 4.2 में एक अलग तरह से मुख्य कार्य शुरू करने के लिए है कि वहाँ:XCS 4.2 क्यों NaututoreleasePool के बजाय main.m में @autoreleasepool का उपयोग करता है?

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, 
           NSStringFromClass([PlistAppDelegate class])); 
    } 
} 

और

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

किसी को भी पता है उन दोनों के बीच अंतर?

+0

इसे एआरसी (http://clang.llvm.org/docs/AutomaticReferenceCounting.html) – bealex

उत्तर

14

पहला एआरसी का उपयोग कर रहा है, जो आपके लिए मेमोरी प्रबंधन को संभालने के लिए आईओएस 5 और ऊपर लागू किया गया है।

दूसरी ओर, आप अपनी मुख्य मेमोरी के अंदर होने वाली हर ऑटोरेलीज को संभालने के लिए अपनी खुद की स्मृति का प्रबंधन कर रहे हैं और एक ऑटोरेलीज पूल बना रहे हैं।

तो क्या iOS5 साथ Obj सी पर नया क्या है पर थोड़ा पढ़ने के बाद ऐसा लगता है कि:

@autoreleasepool { 
    //some code 
} 

अंतर के साथ के रूप में

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
// some code 
[pool release]; 

ही काम करता है कि पिछले एक फेंक एआरसी पर एक त्रुटि।

संपादित:

पहले एक एआरसी का उपयोग कर या नहीं है।

+19

कहा जाता है ध्यान दें कि @autoreleasepool उद्देश्य-सी में उपलब्ध एक नया प्रकार का बयान है और एआरसी के बावजूद इसका उपयोग किया जा सकता है। देखें [1] (http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool) [2] (http://stackoverflow.com/questions/7950583/autoreleasepool-without-arc) – albertamg

+6

'@ autoreleasepool' अब जाने का रास्ता है। ऐप्पल के "संक्रमण से एआरसी रिलीज नोट्स" से: _This वाक्यविन्यास सभी उद्देश्य-सी मोड में उपलब्ध है। यह 'NSAutoReleasePool' वर्ग का उपयोग करने से अधिक कुशल है; इसलिए आपको 'NSAutoReleasePool'._ –

+0

का उपयोग करने के स्थान पर इसे अपनाने के लिए प्रोत्साहित किया जाता है, धन्यवाद दोस्तों! – Foo

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