سؤال

الخلفية

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

لقد قرأت الكثير عن سنو ليوبارد الكبير ارسال المركزي على وجه الخصوص.أنا على علم أنه يستخدم كتل ، ولكني لم أجد في لب الموضوع كيف كتل العمل أو كيف Grand Central Dispatch يعمل.

سؤالي

كيف يمكنني أفضل وضع رمز قاعدة واحدة لكل سنو ليوبارد ليوبارد, مع الاستفادة إلى أكثر درجة ممكنة من جديد متعدد خيوط الاشياء في سنو ليوبارد ؟

NSOperationQueue

حدسي هو عدم التعامل مع الشركة مباشرة في قانون بلدي ، ولكن عندما تكون الأمور تحتاج إلى وضع على قائمة الانتظار ، استخدام NSOperationQueue منذ قرأت من مايك رماد Q&A دورات في سنو ليوبارد ، NSOperationQueue يأخذ الاستفادة الكاملة من GCD و المحطم اكتشف في ليوبارد تم الآن ثابتة.

دليل إدارة الموضوع

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

أو ربما علي أن أعيش فقط مع عدم وجود بلدي التطبيق الأمثل تماما عن سنو ليوبارد والعصا مع +(void)detachNewThreadSelector:toTarget:withObject: أو شيئا من هذا القبيل.

ما يفكر به الناس ؟

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

المحلول

أمعائك الانطباع على GCD هو الصحيح.في الواقع, أي API التي تستخدم كتل ، إلا إذا كنت conditionalize هذا الرمز إلى تشغيل فقط على سنو ليوبارد.أن من المنطقي إذا كان رمز هو دعم الميزات التي لا تتوفر إلا على سنو ليوبارد, ولكن إذا كان هذا هو ميزة كنت تسير أيضا إلى الدعم على ليوبارد كنت قد كذلك مجرد استخدام النمر رمز المسار في جميع الحالات ، إضافة سنو ليوبارد مسار معين لا توفر أي تحسن ملحوظ على المستخدم هو مجرد الذهاب إلى تعقيد الكود الخاص بك وزيادة اختبار الحمل.

وينطبق هذا بصورة خاصة على أشياء مثل الخيط إدارة أو GCD.التغييرات هناك تتطلب قدرا كبيرا من إعادة الهندسة المعمارية, الأمر ليس ببساطة:

if (snowLeopard) {
  [NSSnazySnowLeopardClass doSomething];
} else {
  [NSBoringLeopardClass doSomethingEquivalent];
}

بشكل عام إذا كانت التغييرات التي بسيط التفاح يعالج لهم داخل الصف دون تغيير API.وبعبارة أخرى ، فإن السؤال ليس ما إذا كان يمكنك استخدام أسهل موضوع المدونة في سنو ليوبارد هو لماذا يجب عليك عندما كنت بحاجة الى الذهاب الى القيام بجد نسخة ليوبارد على أي حال.رمز إضافي المسار هو رمز إضافي الطريق حتى يمكنك إسقاط الفهد دعم استخدام مختلفة إلى حد كبير واجهات برمجة التطبيقات على سنو ليوبارد (حتى لو أنها أسهل في الاستخدام من النمر) هي مجرد عمل إضافي.

وأود أن تفكر في ما إذا كنت تريد حقا أن الهدف ليوبارد.سنو ليوبارد اعتماد تم إلى حد ما, سنو ليوبارد هو ترقية رخيصة ، وبسبب التغييرات API سيكون هناك الكثير من الضغط على المستخدمين من المطورين الصغيرة تفعل سنو ليوبارد تطبيقات فقط.فقط مجموعة من المستخدمين التي سوف البقاء على ليوبارد لفترة طويلة من هم ليس من الناحية الفنية والدهاء (من غير المرجح أن تثبيت الكثير 3rd الطرف البرمجيات) ، وتلك التي لا تزال تستخدم أجهزة ماكينتوش PPC (من لم اشترى ماك الجديد في 3 سنوات, لذلك ربما لا يشترون الكثير من البرامج).إذا كان التطبيق هو في رأيك سوف السفينة في 3-9 أشهر وأنا أزعم أن تسير سنو ليوبارد فقط ربما هو خيار معقول و سوف يخفض إلى حد كبير على تطوير واختبار العبء.

نصائح أخرى

طريقة واحدة أن نفهم ما APIs في ليوبارد تم تعديلها في سنو ليوبارد استخدام GCD.على سبيل المثال ، NSOperation وnsoperationqueue في ليوبارد العمل لديهم دائما.ومع ذلك في سنو ليوبارد, لقد تم إعادة كتابة للاستفادة من GCD تحتها.Voilá.الترقية الفورية الخاصة بك 10.6 المستخدمين.

وثمة خيار آخر هو استخدام شيء من هذا القبيل PLBlocks وتجميع GCD في التعليمات البرمجية الخاصة بك نفسك.ليس لدي أي فكرة إن كان هذا العمل ، ولكن يمكن أن يكون يستحق رصاصة واحدة.=)

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