Próbuję napisać prostą funkcję przy użyciu Objective C, który akceptuje obiekt NSDate i zwraca obiekt NSDate zawierający tę samą wartość daty, ale usunął wszystkie składniki czasu z data.Usuwanie komponentów czasu z obiektu NSDate za pomocą Objective C/Cocoa
Na przykład, jeśli mam przekazać NSDate o wartości "2010-10-12 09:29:34" funkcja powróci 2010-10-12 00:00:00.
Funkcja, której używam, wydaje się działać prawidłowo. Jednak kiedy testuję aplikację na iPhone'a, którą opracowuję z Instruments, raportuje, że w funkcji, której używam, występuje przeciek pamięci. Spójrz na moją funkcję poniżej. Gdzie jest wyciek pamięci? Czy istnieje lepszy sposób na osiągnięcie pożądanej funkcjonalności?
Z góry dziękuję !!
-(NSDate *)dateWithOutTime:(NSDate *)datDate
{
if (datDate == nil)
{
datDate = [NSDate date];
}
unsigned int intFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
components = [calendar components:intFlags fromDate:datDate];
return [calendar dateFromComponents:components];
}
Warto zauważyć, że sam nie ma pojęcia NSDate komponentów, ponieważ jest to obiekt, który reprezentuje punkt w czasie. Data czytelna dla człowieka nie ma żadnego właściwego znaczenia bez czasu i lokalizacji. Nawet jeśli czas jest pośrednio jakiś czas w tym dniu w tym locale. – uchuugaka