سؤال

لقد قمت بتنزيل نموذج رمز مخطط مؤامرة AA.

واحد من ملفات .h:

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
@private
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@end

في ملف .m تم إعلان الواجهة مرة أخرى؟

@interface MainViewController()

@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;

@end

لقد وجدت التعليمات البرمجية أعلاه في نموذج وحدة تحكم العرض الرئيسية للعينة.

إذا قمت بذلك، ما سيكون الفرق بين الكود أعلاه والرمز أدناه?

@interface MainViewController : UIViewController <APYahooDataPullerDelegate, CPPlotDataSource> {
    CPLayerHostingView *layerHost;
    APYahooDataPuller *datapuller;
    CPXYGraph *graph;
}    
@property (nonatomic, retain) IBOutlet CPLayerHostingView *layerHost;
@property(nonatomic, retain) CPXYGraph *graph;
@property(nonatomic, retain) APYahooDataPuller *datapuller;
@end
هل كانت مفيدة؟

المحلول

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

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

يمكن للفئات إضافة طرق فقط، وليس المتغيرات المثلية، وهذا هو السبب في أن الكود الأصلي يحتوي على كل الإعلانات المتغيرة المثيل (حتى أولئك الذين لديهم "السرية") في الأصل @interface منع.

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