يبدو الأمر كما لو كنت قد جعلته معقدًا بشكل مفرط. من الواضح أن الفكرة ليست في الحقيقة "هناك متغير اسمه totalSave
"نظرًا لأن المستخدم قد يهتم أقل بالمكان الذي تقوم فيه بتخزينه ، ومن بقية رسالتك ، فأنت لا تهتم بالفعل بكيفية تخزينه.
ومع ذلك ، من أجل جعل هذا الأمر أكثر واقعية ، دعونا نفكر في حالة "النتيجة الإجمالية" التي قد تضيفها أجزاء عديدة من البرنامج. هناك بضعة طرق قد تتبعها. في أي حال ، من المحتمل أن يكون لديك بعض الكائنات في مكان ما يتتبع النتيجة. سوف نسميها Game
الكائن ، ولكن يمكن أن يكون Level
أو أيا كان.
لذلك هناك ثلاث مدارس تفكير كبيرة: يمكنك تمرير هذا Game
اعتراض حول الجميع ، يمكنك الحصول على ملف Game
Singleton ، أو يمكنك استخدام الإخطارات. كل من هذه الأساليب لها مزايا ، وربما يكون أي شخص تختاره جيدًا لبرنامج بسيط (شخصياً ، لبرنامج بسيط للغاية ، كنت أستخدم مفردة).
في المخطط الأول ، في مرحلة ما من البرنامج ، تقوم بإنشاء أ Game
كائن لديه بعض addToScore:
طريقة. يمكنك تعيين هذا الكائن كخاصية على كل كائن آخر يحتاج إلى تحديث النتيجة. كل من هذه المكالمات [self.game addToScore:value]
. هذا النهج يجعل اختبار الوحدة أكثر بساطة ، ولكن يمكن أن يكون مملاً بعض الشيء للتنفيذ.
في المخطط الثاني ، لديك بعض شاركت Singleton +[Game sharedGame]
. عندما تريد تحديث النتيجة ، اتصل [[Game sharedGame] addToScore:value]
. هذا عموما الستيرة للتنفيذ.
في المخطط الثالث ، لديك بعض الأشياء (Game
) الذي يستخدم NSNotificationCenter
لمراقبة بعض الإخطار. عندما تريد تحديث النتيجة ، يمكنك فقط نشر إشعار يتضمن المبلغ المطلوب إضافة قاموس المستخدم الخاص به. هذا أمر رائع للحفاظ على الأمور مفصولًا للغاية ، ولكن مرة أخرى يمكن أن تكون مملة بعض الشيء في الحالة الأكثر المعتاد.
ولكن كما يلاحظ chuck ، فمن المحتمل أنك تفكر في هذا الأمر ، وقد ترغب في العودة والعمل من خلال بعض البرامج التعليمية للحصول على شعور أفضل بكيفية عمل هذه الأشياء عادة. نوع الموقف الذي تصفه ليس معقدًا للغاية.