سؤال

لدي بعض التعليمات البرمجية التي يجب تشغيلها عند إنهاء التطبيق. قمت بتسجيل جهاز التحكم الخاص بي للحصول على NSapplicationWillterMinatification كما يلي:

[[NSNotificationCenter defaultCenter] 
    addObserver: self
       selector: @selector(applicationWillTerminate:)
           name: NSApplicationWillTerminateNotification
         object: nil];

الآن، إذا قمت ببدء تشغيل تطبيقي وإنهاءه خلال أول 20 ثانية أو نحو ذلك، applicationWillTerminate يحصل دعا. إذا قمت بإنهاء التطبيق لاحقا، فهذا لا. ما في طلبي قد يسبب هذا السلوك؟ لقد حاولت أيضا إعداد جهاز التحكم الخاص بي كمفوض NSApplication بنفس النتائج. أيه أفكار؟

شكرا.

أوه، وهذا هو Xcode 3.2، سنو ليوبارد 10.6.1، باستخدام 10.5 SDK. يحدث في كل من التصحيح والإفراج يبني.

هل كانت مفيدة؟

المحلول

هناك عدة أسباب لماذا قد يحدث هذا.

إذا كنت تقوم بتشغيل GC'D، فهل يتم جمع مراقبك ووضع اللمسات الأخيرة قبل انتهاء الإنهاء؟ (يجب أن اختبر هذا وملف الأخطاء إذا فعل ذلك كما يجب توثيقه على الأقل)

هل تطبيقك تحطمها بصمت أو استدعاء الخروج () مباشرة؟

بشكل عام، لا يمكنك الاعتماد على إشعار الإنهاء الذي يتم استلامه حيث قد يذهب المستخدم للقوة إنهاء من هيك منه.

أيضا، في Snow Leopard، هناك ميزة تسمى الإنهاء المفاجئ الذي يسمح لتطبيقك بالسماح للنظام بمعرفة أنه من الآمن لقتل التطبيق بدلا من الذهاب من خلال الإنهاء العادي Rigamarole. هو موثقة في nsprocessinfo. توثيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top