سؤال

سؤال كان يشغل تفكيري في الفترة الماضية.أنا في المقام الأول مطور .net وأعمل في Objective-C لأجهزة iPhone وMac.

كيف يمكنك إرسال "مجموعات البيانات" بين الطرق في الهدف ج.على سبيل المثال، في C#، يمكنك ملء فئة مخصصة بالبيانات وتمريرها في قائمة فئة مخصصة من النوع.على سبيل المثال، إذا كان لديك فئة عملاء، فستفعل شيئًا مثل:

List<Customer> customers = DataLayer.GetAllCustomers();

الطريقة الوحيدة التي يمكنني من خلالها رؤية كيفية القيام بذلك في obj-c هي ملء NSArray بكائنات مخصصة؟هل هذه طريقة فعالة لفعل الأشياء؟هل هناك أي توصيات أخرى؟أنا أستخدم sqlite كقاعدة بيانات/بيانات أريد إرجاعها.

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

المحلول

أنت على الطريق الصحيح.

فئات مجموعة الكاكاو - التي تحتوي جميعها على متغيرات قابلة للتغيير وغير قابلة للتغيير - هي:

  • NSArray:أمر، يمكن أن تحتوي على كائن عدة مرات
  • قاموس نس:يتم نسخ المفاتيح غير مرتبة، والتعيين من المفاتيح إلى القيم
  • NSSet:غير مرتبة، يمكن أن تحتوي على كائن مرة واحدة فقط
  • NSCountedSet:غير مرتبة، يمكن أن تحتوي على كائن عدة مرات

تساعد المتغيرات غير القابلة للتغيير كثيرًا في الكفاءة.النمط القياسي لأدوات الوصول للفئات التي تحتوي على متغيرات قابلة للتغيير هو النسخ بدلاً من الاحتفاظ به.وهذا مقنن في @property آلية، وذلك باستخدام copy صفة على العقار:

// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end

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

بالنسبة إلى Cocoa على نظام التشغيل Mac OS X، أود أيضًا أن أشجعك بشدة على إلقاء نظرة على Core Data.إنه بديل لنمط "مجموعة البيانات" الذي قد تستخدمه من .NET/ADO/etc.باستخدام البيانات الأساسية، لا يمكنك "الحصول على جميع العملاء" ثم تمرير هذه المجموعة.بدلاً من ذلك، يمكنك الاستعلام عن العملاء الذين تهتم بهم، وأثناء اجتيازك لعلاقات الكائنات التي قمت بالاستعلام عنها، سيتم سحب الكائنات الأخرى لك تلقائيًا.

توفر لك البيانات الأساسية أيضًا ميزات مثل النمذجة المرئية لكياناتك، والتوليد التلقائي لمُحرِّرات الملكية وأدوات ضبطها، والتحكم الدقيق في الترحيل من إصدار مخطط إلى آخر، وما إلى ذلك.

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