कौन सही है? यह:मेमोरी प्रबंधन और performSelectorInBackground:
NSArray* foo = [[NSArray alloc] initWithObjects:@"a", @"b", nil];
[bar performSelectorInBackground:@selector(baz:) withObject:foo];
- (void)baz:(NSArray*)foo {
...
[foo release];
}
या:
NSArray* foo = [[[NSArray alloc] initWithObjects:@"a", @"b", nil] autorelease];
[bar performSelectorInBackground:@selector(baz:) withObject:foo];
- (void)baz:(NSArray*)foo {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
...
[pool release];
}
मैं पहली बार एक काम करता है पता है, लेकिन बजना इसके बारे में शिकायत है, तो मुझे आश्चर्य है कि उपयोग करने के लिए एक बेहतर पैटर्न मौजूद है या।
मैं 2 एक "सिर्फ बाहर की कोशिश" होगा, लेकिन autoreleasing साथ, कौन जानता है कि क्या EXC_BAD_ACCESS
की अनुपस्थिति का मतलब है कि आप इसे सही कर रहे हैं या कि तुम सिर्फ भाग्यशाली ...
ओह, यह दस्तावेज में वहीं है! मुझे मूर्ख। :) – lawrence
मैं स्पष्ट करना चाहिए: आप -baz अंदर बना सकते हैं और नाली चाहिए एक autorelease पूल :, जब तक आप जानते हैं कि कुछ भी नहीं के अंदर वहाँ एक -autorelease विधि भेजा जाएगा। अंगूठे का सबसे अच्छा नियम यह मानना है कि ऐसा होगा और एक ऑटोरेलीज पूल बनाएं/निकालें, उदाहरण के लिए 2. लेकिन [पूल नाली] का उपयोग करें, [पूल रिलीज] नहीं। –
जिम डोवी ने बिल्कुल कहा: आपको आमतौर पर मुख्य कार्य के लिए ऑटोरेलीज पूल बनाने की आवश्यकता होती है (थ्रेड प्रोग्रामिंग गाइड देखें)। यह समझना बहुत महत्वपूर्ण है कि इस पूल के पास foo के autorelease के साथ कुछ लेना देना नहीं है। –