سؤال

وأنا قادم من روبي بالهدف-C وأظل به:

NSObject *foo;

@property (nonatomic,retain) NSObject *foo;

في الملف. ح، ومن ثم في ملف .M:

@synthesize foo;

في الجزء العلوي و

[foo release]

وفي dealloc.

وانها 4 خطوات لإضافة foo! هل محنك المبرمجين الهدف-C القيام بكل الخطوات الأربع يدويا في كل مرة يريدون إضافة متغير مثيل جديد لفئة؟ أنا في عداد المفقودين وسيلة لجعل هذا DRY؟

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

المحلول

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

نصائح أخرى

http://pragprog.com/magazines / 2010-07 المطالبات / ليس تماما-الجديدة في ios-، والتي يمكنك إسقاط تعريف متغير، ليصل الى 2 يكرر فقط:)

#import <UIKit/UIKit.h>
@interface MoveMeViewController : UIViewController {
}

@property(nonatomic, retain) IBOutlet UIImageView *imageView;
@end

وبما أنك ذكرت أنك كنت جديدا بالهدف-C، أريد أن تأكد من أنك على علم بأن لم يكن لديك لجعل خصائص كل متغير مثيل في الفصول الدراسية، في واقع الأمر وربما كنت لا ينبغي .

تمثل

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

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

الهدف-C هو طبقة رقيقة جدا على رأس C. في مستوى منخفض، فإن معظم الاشياء "الهدف" يجمع صولا الى مؤشرات التعليمات البرمجية التي يتم حقنها في عملية تجميع C.

وفعلوا إضافة حساب مرجع (النظام الأساسي جمع القمامة) ولكن بسبب انها الطبيعة، انها فعلت كل من جهة، وبالتالي "يطلق" المكالمات.

وإصدارات غير فون واضاف لنظام جمع القمامة حقيقية ولكن هؤلاء لا تقليص كذلك لإطلاق سراح ليست حتمية كما.

والحفاظ على الأشياء الخاصة بك صغيرة ومركزة ويجب بناء الجملة الملكية لا تكون الغازية للغاية.

ونعم أفعل، ولكن آمل شخص يوميا سوف يأتي مع برنامج نصي أو شيء للكسكودي لأتمتة شيء. (كما يفضل

self.foo = nil 

وفي deallocs بلدي)

وسوف تكون قادرة على الحصول على حول الحاجة إلى إعلان كل من متغير مثيل والخاصية عندما يتم نسيان أجهزة الكمبيوتر 32 بت، ووقت التشغيل 64 بت يمكن تجميع المتغيرات المثال. ولكن لا يمكن أن تكون جافة تماما في اللغة حيث يجب أن يعلن الأمور في ملف رأس وتنفيذها في بلد آخر. يتطلب لغة الازدواجية. والطريقة الوحيدة لتجنب في أن يكون لخلق لغة معرفة.

ويمكنك استخدام البرامج النصية للقضاء على الازدواجية في كتابة نفس النمطي المتغير مرارا وتكرارا، ولكن ستظل هناك في التعليمات البرمجية.

وبالمناسبة، أنا لا أعتقد أن بيانsynthesize هو معلومات مكررة. أي شيء آخر في التعليمات البرمجية يشير ما تستخدم accessors لتحصل على الممتلكات.

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