لماذا لا يجب أن أصدر هذه السلسلة؟
-
20-09-2019 - |
سؤال
انظر إلى الطريقة التالية:
-(void)updateProfile:(Profile *)profile WithJSON:(NSString *)JSON;
{
SBJSON *parser = [[SBJSON alloc] init];
NSDictionary *object = [parser objectWithString:JSON error:nil];
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setPositiveFormat:@"#,##0"];
profile.displayName = [object valueForKey:@"displayName"];
profile.profileURL = [object valueForKey:@"profileURL"];
NSString *rep = [object valueForKey:@"reputation"];
profile.reputation = [[nf numberFromString:rep] intValue];
//[rep release]; <-Why not release?
[nf release];
//[object release]; <-Why not release?
[parser release];
}
لقد علقت سطرين ، مما يعطيني exc_bad_access إذا لم يكن كذلك.
هل يمكن لأحد أن يشرح لي لماذا من الخطأ إطلاق هذه الأشياء؟
المحلول
يجب ألا تصدره لأنك لم تفعل +alloc
, -retain
, ، أو -copy
هو - هي. منشئي الراحة مثل +objectWith…
إرجاع الكائنات التي صدرت التلقائي.
نصائح أخرى
السؤال الأفضل الذي يجب طرحه هو: لماذا ينبغي هل تطلقها؟ ماذا فعلت للمطالبة بالملكية على الكائن؟ الجواب في هذه الحالة هو "لا شيء". نظرًا لأنك لا تملكها ، لا يمكنك إطلاقها جيدًا.
لا تنتمي إلى StackOverflow