سؤال

إذا لم نرغب في تنفيذ طريقة init في فئتنا ، مع الأخذ في الاعتبار أن init في nsobject لا تُرجع سوى مثيل للكائن دون تهيئة ، لا أرى نقطة الاتصال init بالفعل إذا حصلنا على المثيل بالفعل . لقد جربت ويعمل ، لكنني لست متأكدًا من أنه لن يتسبب في مشاكل مستقبلية.

myClass *newObject = [myClass alloc];

بدلاً من:

myClass *newObject = [[myClass alloc] init];

شكرًا جزيلاً.

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

المحلول

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

تتوقع العديد من الفصول أنهم init يتم استدعاء الأساليب وربما تسبب حوادث إذا لم تتصل init. إذا كنت تتحدث عن فصل مخصص يرث مباشرة من NSObject ولا تحتاج إلى تهيئة لمتغيرات المثيل ، فقد تفلت من ذلك [myClass alloc] لكنه بالتأكيد ليس أسلوب برمجة جيد.

نصائح أخرى

أعتقد أنها ليست فكرة جيدة.
اقرأ نمط تصميم الكاكاو ، وخاصة "إنشاء مرحلتين"

يمكنك أيضًا قراءة هذه المقالة http://www.informit.com/articles/article.aspx؟p=1398610

أعتقد أنه لن يهم كثيرًا إذا لم تقم بتطبيق "- (معرف) init" لأنه إذا فعلت ذلك ، فسوف تتصل بـ NSObject's Init التي تُرجع نفس القيمة التي ترسلها إلى الطريقة. على الرغم من أنه من الجيد إنشاء طريقة init الخاصة بك لتعيين متغير المثيل الخاص بك.

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