Возможная утечка памяти с NSDate в Struct - PullRequest
0 голосов
/ 08 марта 2012
//h file

struct runSTRUCT{
   NSDate *RunDateTime;
} ;

 //m file

struct runSTRUCT run;

- (void)viewDidLoad {
   [super viewDidLoad];
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   dateFormatter.timeStyle = NSDateFormatterNoStyle;
   [dateFormatter setDateFormat:@"MM/dd/yyyy   HH:mm"];
   run.RunDateTime = [dateFormatter dateFromString:@"12/02/2012   12:22"];
   NSString *dateTimeStr = [dateFormatter stringFromDate:run.RunDateTime];
   [dateFormatter release]; 
}

Все это прекрасно работает.Затем, когда я нажимаю кнопку и создаю строку из даты, она дает мне EXC_BAD_ACCESS.

-(IBAction)respondButtonPressed:(id)sender{
   NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
   dateFormatter2.timeStyle = NSDateFormatterNoStyle;
   [dateFormatter2 setDateFormat:@"MM/dd/yyyy   HH:mm"];
   NSString *dateTimeStr = [dateFormatter2 stringFromDate:run.RunDateTime]; 
   [dateFormatter2 release]; 
}

Когда я смотрю в консоли и распечатываю описание, обычно это показывает 1 из двух вещей:

  1. Отлаживаемая программа сигнализировалась в функции, вызываемой из GDB.GDB восстановил контекст до того, что было до вызова.Чтобы изменить это поведение, используйте «set unwindonsignal off». Оценка выражения, содержащего функцию (CFShow), будет отменена.Отлаживаемая программа сигнализировалась во время вызова функции из GDB.GDB восстановил контекст до того, что было до вызова.Чтобы изменить это поведение, используйте «set unwindonsignal off». Оценка выражения, содержащего функцию (CFShow), будет прекращена.

  2. Или «run.runDateTime» является некоторой случайной величиной

РЕДАКТИРОВАТЬ: Я не уверен, что я поставил их в нужное место, потому что это все еще не работает (я, вероятно, не).

- (void)viewDidLoad {
      [super viewDidLoad];
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      dateFormatter.timeStyle = NSDateFormatterNoStyle;
      [dateFormatter setDateFormat:@"MM/dd/yyyy   HH:mm"];
      run.RunDateTime = [dateFormatter dateFromString:@"12/02/2012   12:22"];
      NSString *dateTimeStr = [dateFormatter stringFromDate:run.RunDateTime];

     [run.RunDateTime retain];

      [dateFormatter release]; 
}

-(IBAction)respondButtonPressed:(id)sender{
   NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
   dateFormatter2.timeStyle = NSDateFormatterNoStyle;
   [dateFormatter2 setDateFormat:@"MM/dd/yyyy   HH:mm"];
   NSString *dateTimeStr = [dateFormatter2 stringFromDate:run.RunDateTime]; 

   [dateFormatter2 release]; 
}

У меня также естьпара NSStrings в структуре, и они работают нормально.

1 Ответ

2 голосов
/ 08 марта 2012

Вам необходимо сохранить RunDateTime после того, как вы назначите / создадите его из средства форматирования даты.

 [run.RunDateTime retain];

Удостоверьтесь, что выпустили его в свой dealloc!

...