سؤال

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

سؤالي هو: بما في ذلك هذا الفصل في المشروع ، سوف ينفخ المشروع برمز عديمة الفائدة أم أن المترجم فقط يتضمن الأساليب المستخدمة؟

أعني ، إذا كان لدى صفي 30 طريقة ولكن يتم استخدام 4 فقط في مشروع معين ، فهل يتضمن برنامج التحويل البرمجي أيضًا غير المستخدم الآخر 26 أو فقط 4 المستخدم في المنتج النهائي؟

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

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

المحلول

يدعم الرابط تجريد ميت, ، إذا قمت بتشغيله على رمز غير مستخدم ، فيجب ألا يسبب أي نفخ.

من مستندات التفاح:

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

لا يقتصر تجريد الرمز الميت على إزالة الوظائف غير المستخدمة فقط والرمز القابل للتنفيذ من ثنائي. يزيل الرابط أيضًا أي رموز وبيانات غير مستخدمة توجد في كتل البيانات. قد تتضمن هذه الرموز المتغيرات العالمية والمتغيرات الثابتة وبيانات السلسلة وغيرها.

عند تمكين تجريد الرمز الميت ، يبحث الرابط الثابت عن التعليمات البرمجية التي لا يمكن الوصول إليها من مجموعة أولية من الرموز والكتل الحية.

نصائح أخرى

إذا كانت الطرق الـ 26 الأخرى لها رمز في @implementation, ، ثم نعم ، سيتم استخدامها في المنتج النهائي.

والسبب بسبب نظام وقت التشغيل. حتى لو لم تستخدم 26 طريقة في وقت الترجمة ، فليس هناك ما يضمن أنه لن يتم إحالته في وقت التشغيل (تذكر NSSelectorFromString و -performSelector:).

لا أعرف ما إذا كانت هناك طريقة لإجبار هذه الرمز. ((-dead_strip لا يعمل.)

يبدو أنك بحاجة إلى إعادة تسمية فئة Mamma الكبيرة.

سؤالي هو: بما في ذلك هذا الفصل في المشروع ، سوف ينفخ المشروع برمز عديمة الفائدة أم أن المترجم فقط يتضمن الأساليب المستخدمة؟

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

عادة ما يكون التأثير الأكبر من حيث الحجم هو الموارد التي تتضمنها مع تطبيقك (الصور والسلاسل وما إلى ذلك).

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