سؤال

النظر في الطريقة التالية ، حيث أقوم بإنشاء سلسلة وأعيدها. أرغب في إطلاق اللبنات الأساسية للسلسلة ، ولكن بعد ذلك تعتمد السلسلة على القيم التي لم تعد موجودة. ماذا الآن؟

هل أتسرب الذاكرة وإذا كان الأمر كذلك ، فكيف يمكنني تصحيحها؟

- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];

NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];

[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];

return middahStr;

}

في نهاية الطريقة ، سلسلة العودة ، middahStr لم يتم إصداره. هذا هو مشكلة؟ هل أتسرب الذاكرة؟

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

المحلول

العكس تماما: أنت مفرط الإفراج.

middah أنت تخصيص ويبت. ثم تطلقه. كل شيء على ما يرام.

firstPartOfMiddah و secondPartOfMiddah, ، يمكنك تسمية طريقة الراحة "StringWith" NSString. هذا يعادل التذرع بالتوضيح ، init ، و Autorelease. إن إطلاق سراحهم خطأ ، حيث يتم إعطاؤهم بشكل أساسي لإصدار Autorelease لاحقًا.

middahStr أنت تسمي طريقة الراحة ، لكن إعادتها. كل شيء على ما يرام. سيتم إصداره لاحقًا بواسطة تجمع Autorelease.

قاعدة الإبهام (أنا متأكد من أن هناك الكثير من الاستثناءات): إذا لم تقم بتخصيصها ، فلا تطلقها.

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