الاختلافات بين الهدف-C 2.0 مقابل CLR في ما يخص إدارة الذاكرة

StackOverflow https://stackoverflow.com/questions/813616

سؤال

ولقد تعلم لتطوير التطبيقات على منصة الكاكاو التي تعمل باللمس. لقد قطعنا شوطا طويلا ولكن قطعة واحدة لا أستطيع أن التفاف رأسي حول هو إدارة الذاكرة.

واعتقدت أن تسلك طريقا المقارنة بدلا من محاولة البدء من نقطة الصفر. لا أستطيع أن أجد كثيرا على الفرق بين CLR (صافي) والهدف-C 2.0 لذلك أنا أتساءل عما اذا كان يمكن للمجتمع كومة تجاوز مساعدتي مع هذا السؤال.

ما هي المفتاح / اختلافات هامة في إدارة الذاكرة بين الهدف-C 2.0 وCLR؟ وفيما يتعلق بالهدف-C 2.0، أنا النامية في نظام التشغيل اي فون وتثبيط وظيفة autorelease.

وأعتقد أنا أبحث عن مقارنة بين اثنين ... منذ أنا قادم من خلفية .NET، ما قد يكون الأشياء التي تحتاج لمعرفته حول-C الهدف إدارة الذاكرة 2.0؟

وشكرا لكم جميعا!

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

المحلول

ووCLR يعمل في جهاز ظاهري. يتم التعامل مع كافة إلغاء تخصيص الكائنات بواسطة نظام جمع القمامة. عموما في الهدف-C الذاكرة يجب أن تدار يدويا إما عن طريق القديم C أسلوب malloc / مجانا أو عن طريق نظام حساب مرجع للاحتفاظ / الإصدار. إذا كنت قادما من "C" الخلفية القياسية، فإن تقنية لا يبدو الخارجية أيضا.

ومع حساب مرجع، التهم نظام كم مرة يتم استخدام كائن معين - وهذا هو الأساس "الاحتفاظ بهم" المذكورة أعلاه. عندما يتم شيء باستخدام كائن الكائن هو يدويا إرسال "الافراج" الرسالة التي التناقصات الكائن الاحتفاظ العد بمقدار 1. عندما يصل عدد 0، ونظام إلغاء تخصيص تلقائيا الكائن. وهذا يبدو مرهقة للغاية بالمقارنة مع CLR / صافي ولكن على أن آلية أداء أفضل ومزيد من السيطرة.

إذا كنت الترميز في الهدف C 2.0 على ماكنتوش، وكنت في الحظ منذ جمع القمامة يمكن تمكين عبر خيار في كسكودي. وسوف يكون هذا أقرب إلى ما يوفر CLR. إذا كنت تقوم بتطوير على اي فون، وتكاليف جمع القمامة كثيرا من حيث الذاكرة وحدة المعالجة المركزية لذلك ليست خيارا. يجب أن تدار الذاكرة يدويا.

لحسن الحظ، هناك في الفترات الفاصلة بين الخيار الذي يستخدم عادة عن طريق إرسال رسالة و"autorelease" إلى كائن. هذه الآلية، وشملت في كل من ماكنتوش وفون، أساسا حمامات تخصيص الكائنات إلى القاموس العالمي (في الواقع يسمى حمام سباحة autorelease). إما عند وجود التطبيق أو عندما يتم استنزاف حوض السباحة، ثم يتم إلغاء تخصيص الكائنات. ومع ذلك، ليس كل شيء يسير في بركة autorelease ولا تريد لوضع كل شيء هناك. أوصي القراءة الجافة ولكنها مهمة من الهدف-C 2.0 لغة برمجة من موقع أبل أن يذهب إلى الطريق بمزيد من التفصيل.

http://developer.apple.com/documentation /Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

وحظا سعيدا والصبر. موضوعي-C ليس طفل جديد على الكتلة مثل صافي (على مدى 25 سنة)، ولكن لديها بعض الميزات لا يصدق أن صافي بدأت للتو الآن لدمج.

نصائح أخرى

في اي فون هو اليدوي. إذا كنت تخصيص أو الحفاظ على الذاكرة يجب الإفراج عنها.

في CLR. NET كنت لا يهمني كيف الذاكرة أو ما الكائن تفعل معها بالنسبة للجزء الأكبر.

لاي فون التي تحتاج إليها لتحقيق التوازن في كل تخصيص الكائن، الحرف الأول أو الاحتفاظ بها مع بيان. كما يستخدم اي فون آلية حساب مرجع بسيط، وبمجرد أن العد يقع على عاتق 0 الكائن سوف تحصل على تنظيف.

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

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