iphone - is the main.m really the place, where the autorelease pool of the main run loop is created by every event? -
#import & lt; UIKit / UIKit.h & gt; Int main (int argc, char * argv []) {एनएसएलॉग (@ "नया इवेंट ..."); NSAutoreleasePool * पूल = [[एनएसएयूटीओरियसपुल आलोक] इनिट]; Int retVal = UIApplicationMain (argc, argv, शून्य, शून्य); [पूल रिलीज]; रिटर्न रेटवल; } यदि यह मामला है, तो मुख्य () फ़ंक्शन को हर घटना पर बुलाया जाएगा, है ना? लेकिन मैंने इसे करने की कोशिश की, और "नया इवेंट ..." लॉग संदेश ऐप शुरू होने पर आता है। इसलिए मुझे लगता है कि मुख्य थ्रेड में एक और ऑटोरिवेट पूल होना चाहिए।
नहीं। स्मृति को रिसाव न करने के लिए सभी कोको या कोकोटाच कक्षाओं को एक ऑटोरेक्ज पूल की उपस्थिति की आवश्यकता होती है इस प्रकार, किसी मौजूदा (संभवतया) ऑटरेलेज़ेड ऑब्जेक्ट को कवर करने के लिए, UIApplicationMain () को संदर्भित करने के लिए, एक मौजूदा ऑटोरेक्ज पूल को आवश्यक है, जो UIApplicationMain () को कॉल करने के लिए आवश्यक है। यह बाहरी ऑटोरेक्लोज़ पूल है, जैसा कि आप UIApplicationMain की वापसी के बाद सूखा देख सकते हैं, बस एप्लिकेशन से बाहर निकलने से पहले। एक आंतरिक (याद रखें कि ऑटोरिएले पूल को नेस्टेड किया जा सकता है और ऑटोरेलेज्ड ऑब्जेक्ट्स को नवीनतम / गहनतम पूल में जोड़ दिया गया है) ऑटोरिवेट पूल पूल के आवेदन रन लूप के प्रत्येक चलना की शुरुआत में बनाया गया है और पुनरावृत्ति के अंत में जारी किया गया है। इस प्रकार, रन लूप के प्रत्येक पुनरावृत्त "स्वयं" ऑटोरिवेट पूल है। यदि कोई इवेंट प्रसंस्करण बहुत अधिक आटोरेलेज्ड मेमोरी (आईफोन पर एक बुरा विचार है, लेकिन ओएस एक्स पर काफी आम) उत्पन्न कर सकता है, तो आप उस इवेंट हैंडलिंग कोड में अपने खुद के आंतरिक ऑटोरिएज पूल बनाना चाह सकते हैं जो इसे प्रोसेसिंग के दौरान रिलीज़ किया जा सकता है घटना।
Comments
Post a Comment