سؤال

لدي التطبيق الكاكاو مع قوس تمكين.أنا باستخدام نظام التشغيل 10.8 و كسكودي 4.4.التطبيق تعطل بشكل متقطع على المكالمات إلى غلايريليس ، إغراق الرسائل مثل ما يلي إلى وحدة التحكم:

error for object 0x10a2d2000: entry for pointer being freed from death-row vanished

إذا كنت أعلق على المكالمات إلى غلايريليس توقف تحطمها.هل أنا بحاجة إلى استدعاء غلايريليس في أرك تمكين المشاريع?الوثائق ليست واضحة جدا حول هذا الموضوع.

فمن الصعب أن رمز آخر لهذا لأنه ينتشر في جميع أنحاء ملف كبير لفئة التي ترث من نسفيو.يحتوي الفصل على عضو بيانات CGLayerRef layer;.ثم داخل وظيفة دراوريكت:

    if (layer == nil) {
        layer = CGLayerCreateWithContext(context, self.frame.size, NULL);
        // draw some stuff into CGLayerGetContext(layer)
    }
    CGContextDrawLayerInRect(context, self.bounds, layer);

الفئة هي أيضا مندوب من نافذتها ولها الوظيفة التالية

- (void)windowDidEndLiveResize:(NSNotification *)notification {
    if (layer) {
        //CGLayerRelease(layer);
        layer = nil;
    }
    [self setNeedsDisplay:YES];
}

أيضا داخل اضع الممتلكات

- (void)setPitch:(NSArray *)aPitch {
    pitch = aPitch;
    if (layer) {
        //CGLayerRelease(layer);
        layer = nil;
    }
}

الآن إذا قمت بإلغاء تعليق المكالمات إلى CGLayerRelease ثم أحصل بشكل متقطع على الحادث المذكور أعلاه.أؤكد "بشكل متقطع" لأنه لا يحدث دائما.

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

المحلول

نعم ، تحتاج إلى استدعاء غلايريليس () في أرك.المهام المذكورة أعلاه تبدو صحيحة ، ولكن أظن أنك قد يكون الآخرين.كنت الوصول مباشرة إيفارس الخاص بك ، والذي هو السبب #1 من هذه الأنواع من حوادث.لا تصل إلى إيفارس الخاصة بك إلا في الحرف الأول و ديالوك.إنشاء ملحق ل setLayer: أن يطلق بشكل صحيح القديم ويخلق واحدة جديدة ودائما استخدام ذلك.

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

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