Как преобразовать NSDate в NSString? - PullRequest
10 голосов
/ 01 июля 2011

преобразование NSDate в NSString создает утечку памяти, может кто-нибудь помочь.

Вот мой код: -

NSDate *today = [[NSDate alloc]init];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
dateString = nil;
dateString =[[NSString alloc]initWithString:[df stringFromDate:today]];
[df setDateFormat:@"EEEE       MMM dd yyyy"];
[dateButton setTitle:[df stringFromDate:today] forState:UIControlStateNormal];
[df release];
[today release];

Ответы [ 7 ]

8 голосов
/ 01 июля 2011

Поскольку вы ничего не выпускаете, код создает утечку памяти.

NSDate *today = [NSDate date]; //Autorelease
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; //Autorelease

[df setDateFormat:@"yyyy-MM-dd"]; // 2017-09-28
dateString = [[df stringFromDate:today] retain];

[df setDateFormat:@"EEEE       MMM dd yyyy"];  // Thursday Sep 28 2017
[dateButton setTitle:[df stringFromDate:today] forState:UIControlStateNormal];

Подробнее см. В документации Apple .

6 голосов
/ 01 июля 2011

Используя ваш код ...

NSDate *today = [[NSDate alloc]init]; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"yyyy-MM-dd"]; 
dateString = nil; 
dateString = [[NSString alloc]initWithString:[df stringFromDate:today]];

... вам нужно выпустить много obj, потому что в autorelease ничего нет.

[today release];  -> alloc
[df release]      -> alloc
[dateString release]; -> alloc

Или изменить на:

NSDate *today = [NSDate date];
NSDateFormatter *df = [NSDateFormatter initWithDateFormat:@"yyyy-MM-dd"];
dateString = [df stringFromDate:today];

без одного выпуска / выделения!

6 голосов
/ 01 июля 2011

Использование

NSDate *today = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
dateString = [df stringFromDate:today];
[df release]
3 голосов
/ 01 июля 2011

Вы должны выделять или инициировать NSDate объект

Попробуйте этот код

NSDate *today = [NSDate date];
NSDateFormatter *dt = [[NSDateFormatter alloc]init];
[dt setDateFormat:@"yyyy-mm-dd"];
NSString *str =[NSString stringWithFormat:@"%@",[dt stringFromDate:today]];
NSLog(@"%@",str);
[dt release];

Счастливое кодирование

3 голосов
/ 01 июля 2011

Кроме того, попробуйте использовать ...

[NSDate date]

вместо ...

NSDate* today = [[NSDate alloc] init];

, что является большим количеством выделения / инициализации, которое вы также делаете там ... Вам также не нужно выделять / инициализировать строку NSString.

3 голосов
/ 01 июля 2011

Утечка в DateFormatter, который не был выпущен.Это должно исправить утечку:

[df release];
1 голос
/ 22 января 2014

Еще один ответ:

NSDateFormatter  *df = [NSDateFormatter initWithDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [df stringFromDate:[NSDate date]];

с использованием ARC, все автоматически выпущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...