سؤال

أنا أعمل على تطبيق iPhone الذي سيبني ، في وقت التشغيل ، وسيلة nsmutabledictionary التي ستكون قيمها (لأزواج القيمة الرئيسية) من أجلها. كونه جديدًا إلى حد ما على الهدف-C ، أشعر بالقلق من أن ما يلي سيؤدي إلى تسرب ذاكرة:

- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
    supplierPhotoArray = [[NSMutableArray alloc] init];
    [supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
    [supplierPhotoArray release];
}
}

SupplierPhotos هو nsmutabledictionary ، وهو متغير عضو في الفئة المحتوية.

كما ترون ، عندما أقبل Uiimage* لوضعها في الهيكل ، أتحقق أولاً لمعرفة ما إذا كان الكائن في زوج القيمة الرئيسية المقابلة للوسيطة الثانية (المورد) لا شيء. إذا كان الأمر لا شيء ، فأنا أقوم بخصم nsmutablearray وأقوم بتعيينه ككائن لهذا المفتاح ، ثم أطلقه. على افتراض أنني Mealloc nsMutabletictionary في صفقة الفصل في الفصل الذي يحتوي على هذه الطريقة ، هل سيتم إصدار المراجع؟ قبل Dealloc-ing the nsmutabledictionary ، هل أحتاج إلى الركض من خلاله و dealloc الفردية nsmutablearrays الموجودة في؟

شكرًا،

بن ب.

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

المحلول

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

نصائح أخرى

تبدو إدارة الذاكرة هذه صحيحة بالنسبة لي. يمكنك إصدار نسخة واحدة قمت بخصائها ، ويحمل الصفيف مرجعًا آخر بمجرد إضافته ، وبالتالي فإن عدد الشباك هو 1 وهو صحيح.

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