سؤال

وأنا تحديد العدد، كما يلي:

NSNumber *nn0 = [NSNumber numberWithInt:0];

وأنه يعمل بشكل جيد دون أي الوك. ما أفهمه هو أنه إذا كنت تستخدم numberWithInt، تسمى الوك والحرف الأول تلقائيا.

إذا وأنا أحاول أن الإفراج في نهاية ظيفة بلدي، وأنا واجهت مشاكل:

[nn0 release];

وأحصل على خطأ وقت التشغيل.

وسؤالي هو: إذا كنت تستخدم numberWithInt إلى التهيئة للNSNumber، لا بد لي من القيام بأي إدارة الذاكرة على أنه

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

المحلول

وو"الصانعين راحة" لكثير من أنواع تنتج كائن موجود تلقائيا "autoreleased" - أي سيتم الاحتفاظ الكائن الجديد من قبل NSAutoreleasePool الحالية. لا تحتاج للافراج عن هذه الكائنات يدويا - سيتم الافراج عنهم عند تحرير NSAutoreleasePool الحالي / استنزفت

وانظر هذه الصفحة للحصول على وصف الصانعين الراحة، وكيفية إدارة الذاكرة لهذه.

HTTP: // شبكة الاتصالات العالمية. macdevcenter.com/pub/a/mac/2001/07/27/cocoa.html؟page=3

نصائح أخرى

واتبع حكم إدارة الذاكرة الأساسية: إذا كنت "الخاصة" المتغير، عليك أن تتخلى عن النهاية الملكية. كنت تأخذ ملكية: خلق الكائن (الوك / جديد / نسخة) أو أخذ الملكية (الاحتفاظ) على وجه التحديد. في كل هذه الحالات، كنت المطلوبة لتحريرها.

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

إذا كنت اطلاق سراح ما كنت لا تملك، سوف تحصل على خطأ وقت التشغيل.

وحكم بسيط، مع استثناءات قليلة جدا:

<اقتباس فقرة>   

إذا محدد عودته كائن لديه كلمة "جديد"، "الوك"، "الاحتفاظ" أو "نسخ" في ذلك، ثم كنت تملك الكائن عاد ومسؤول عن إطلاقه عند الانتهاء.

وإلا على كنت لا تملك ذلك ثم لا ينبغي أن الإفراج عنها. إذا كنت تريد أن تبقي إشارة إلى كائن غير المملوكة، يجب عليك الاتصال -[NSObject retain] على هذا المثال. أنت الآن "الخاصة" أن المثال على ذلك يجب استدعاء -[NSObject release] على سبيل المثال عندما كنت فعلت معها. وهكذا كنت لا تملك المثال إرجاعها بواسطة -[NSNumber numberWithInt:] ويجب أن لا ندعو -release عليه عند الانتهاء منها. إذا كنت تريد أن تبقي على سبيل المثال عاد خارج نطاق الحالي (حقا وراء عمر المثال NSAutoreleasePool الحالي)، يجب أن -retain ذلك.

في المصطلحات باستخدام التعابير المنطقية، بيتر Hosey يضع بها بشكل جيد جدا في كتابه <لأ href = "http://boredzo.org/blog/archives/2007-01-11/the-cocoa-memory-management-regular-expression "يختلط =" noreferrer نوفولو "> بلوق . كنت تملك مثيل كائن عاد إذا محدد طريقة مباريات هذه التعابير المنطقية:

/^retain$|^(alloc|new)|[cC]opy/

وبطبيعة الحال، فإن إشارة محددة هي إدارة الذاكرة دليل البرمجة ل الكاكاو .

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