سؤال

ماذا تعني كلمة "nonatomic" في هذا الكود؟

@property(nonatomic, retain) UITextField *theUsersName;

ما هو الفرق بين الذرية وغير الذرية؟

شكرًا

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

المحلول

نلقي نظرة على مستندات أبل.

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

إذا كنت تستخدم الافتراضي (وهو atomic;لم تكن هناك كلمة رئيسية لهذا، ولكن هناك هو الآن)، ثم @synthesizeتستخدم الأساليب d قفلًا على مستوى الكائن لضمان إجراء تسلسل لعمليات القراءة/الكتابة المتعددة لخاصية واحدة.كما تشير مستندات Apple، هذا لا يعني أن الكائن بأكمله آمن للخيط, ، ولكن الخاصية الفردية تقرأ/تكتب.

بالطبع، إذا قمت بتنفيذ الملحقات الخاصة بك بدلاً من استخدامها @synthesize, أعتقد أن هذه التصريحات لا تفعل شيئًا سوى التعبير عن نيتك فيما يتعلق بما إذا كانت الخاصية قد تم تنفيذها بطريقة آمنة.

نصائح أخرى

بعد قراءة العديد من المقالات ومنشورات StackOverflow، وبعد إنشاء تطبيقات تجريبية للتحقق من سمات الخصائص المتغيرة، قررت تجميع جميع معلومات السمات معًا

  1. الذرية //الافتراضي
  2. غير ذرية
  3. قوي = الاحتفاظ //الافتراضي
  4. ضعيف= غير آمن_غير محتفظ به
  5. يحتفظ
  6. تعيين //افتراضي
  7. unsafe_unretained
  8. ينسخ
  9. يقرأ فقط
  10. قراءة/كتابة افتراضية

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

سمات الخصائص المتغيرة أو المعدلات في iOS

  1. الذري
    • الذري يعني وصول مؤشر ترابط واحد فقط إلى المتغير (النوع الثابت).
    • الذرية آمنة للخيط.
    • لكنه بطيء في الأداء.
    • الذرية هو السلوك الافتراضي.
    • أدوات الوصول الذرية في بيئة غير مجمعة للقمامة (أيعند استخدام الاحتفاظ/الإصدار/الإصدار التلقائي) سيستخدم قفلًا للتأكد من أن مؤشر ترابط آخر لا يتداخل مع الإعداد/الحصول على القيمة الصحيحة.
    • إنها ليست في الواقع كلمة أساسية.

مثال :

@property (retain) NSString *name;

@synthesize name;
  1. غير ذرية
    • Nonatomic تعني الوصول المتعدد إلى المتغير (النوع الديناميكي).
    • Nonatomic هو موضوع غير آمن.
    • لكنه سريع في الأداء.
    • السلوك غير الذري ليس السلوك الافتراضي؛نحن بحاجة إلى إضافة الكلمة الأساسية غير الذرية في سمة الخاصية.
    • قد يؤدي إلى سلوك غير متوقع، عندما تصل عمليتان (خيوط) مختلفتان إلى نفس المتغير في نفس الوقت.

مثال:

@property (nonatomic, retain) NSString *name;

@synthesize name;

وبالإضافة إلى ما سبق أن قيل عن threadsafeness، خصائص غير نووية هي أسرع من يمكنهم الدخول الذرية. انها ليست شيئا تحتاج عادة ما يدعو للقلق، ولكن يبقى ذلك في الاعتبار. ولدت البيانات الأساسية الخصائص هي nonatomic جزئيا لهذا السبب.

في برنامج متعدد الخيوط، وهي عملية الذرية لا يمكن أن توقف بشكل جزئي من خلال، في حين أن عمليات nonatomic يمكن.

لذلك، يجب عليك استخدام كائنات المزامنة (أو شيء من هذا القبيل) إذا كان لديك عملية الحرجة التي هي nonatomic أن كنت لا تريد توقف.

إذا قمت بتحديد "الذري"، وظائف وصول ولدت لديها بعض رمز إضافية للوقاية من التحديثات في وقت واحد.

وسائل الذرية وعادة ما يكتب / يقرأ إلى الخاصية يحدث كعملية واحدة. Atomic_operation

ويمكنك قادرة على الحصول على التعامل مع هذه المواد من خلال قراءة المادة التالية.

الخيوط وأوضح مع nonatomic لغرض

وnonatomic - ليس الموضوع الآمن

والذرية - الموضوع الآمن - وهذا هو السمة الخاصية الافتراضية.

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

@property (nonatomic, retain)  NSString *myString;

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

واحد هو للمواضيع متعددة. واحد يكون لا

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