Struct中的NSDate可能发生内存泄漏

时间:2012-03-08 15:08:33

标签: ios struct nsstring nsdate exc-bad-access

//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. 正在调试的程序在从GDB调用的函数中发出信号。 GDB已将上下文恢复到调用之前的状态。 要更改此行为,请使用“set unwindonsignal off” 将放弃对包含该函数(CFShow)的表达式的评估。 正在调试的程序在从GDB调用的函数中发出信号。 GDB已将上下文恢复到调用之前的状态。 要更改此行为,请使用“set unwindonsignal off” 将放弃对包含该函数(CFShow)的表达式的评估。

  2. 或“run.runDateTime”是一些随机变量

  3. 编辑:我不确定我是否把它们放在正确的位置,因为它仍然不起作用(我可能没有)。

    - (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 个答案:

答案 0 :(得分:2)

从日期格式化程序分配/创建后,您需要保留RunDateTime。

 [run.RunDateTime retain];

确保在你的dealloc中发布它!