Течь?dateFromComponents обязательно возвращает автоматически освобожденный объект, нет? - PullRequest
2 голосов
/ 06 июля 2011
-(NSDate *)dateFromDate:(NSDate *)inDate withNewTime:(NSDateComponents *)inTimeComponents {

NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *newComponents = [self.sysCalendar components:unitFlags fromDate:inDate];
[newComponents setHour:[inTimeComponents hour]];
[newComponents setMinute:[inTimeComponents minute]];
return [self.sysCalendar dateFromComponents:newComponents];

}

Я не могу понять, почему это протекает.Разве это не вернет объект с автоматическим возвратом?Он работает как задумано, но когда я запускаю на инструментах, кажется, что объект даты подтекает и стек указывает, что он здесь создан.

sysCalendar - это свойство со следующим геттером:

-(NSCalendar *)sysCalendar {
if (sysCalendar != nil) {
    return sysCalendar;
}

self.sysCalendar = [NSCalendar currentCalendar];
return sysCalendar;

}

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Просто чтобы прояснить: вы говорите, что объект NSDate протекает, а не объект NSDateComponents, верно?

Таким образом, Утечки, как правило, не могут сказать вам, где вы, возможно, забыли выпустить дату, которая была создана здесь в этом заявлении возврата. Это просто говорит вам, что это то место, где оно было создано.

Итак, посмотрите, что вы делаете с этим новым NSDate, после того как вы вернете его из этого метода.

1 голос
/ 06 июля 2011

Когда Instruments показывает вам, где произошла утечка, она фактически показывает вам, где был создан утечка.

В этом случае создается впечатление, что созданный здесь объект не был должным образом освобожден в другом месте.

...