打印 NSString 时应用程序崩溃



使用字符串崩溃应用程序。
temp是普通字符串,strStartDate也是来自日期的字符串。.h 文件

NSString *temp;
NSString *strStartDate
int status;

.m 文件

-(void)viewDidLoad
{
    [super viewDidLoad];
    status = 1;
     strStartDate=[[NSString alloc]init];
    [self stateChanged];
}
-(void)stateChanged
{
    switch(status)
    {
    case 0:
        NSLog(@"%@",temp);
        NSLog(@"Start Date : %@",strStartDate);
        break;
    case 1:
        temp=[[NSString alloc]initWithString:@"Temp is here"];
        chargeStartDate=[[NSDate date] retain];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM/YYYY"];
        strStartDate =  [dateFormat stringFromDate:chargeStartDate];
        NSLog(@"string of start date : %@",strStartDate);
        [timeFormat release];
        [dateFormat release];
        break;
    }
}

temp是普通字符串,strStartDate也是来自日期的字符串。字符串tempstrStartDate都分配相同的位置,两者都是类变量,并且打印相同的位置,但在case 0温度下打印,strStarDate崩溃。为什么?

我知道这很简单,但我无法理解。请帮助我。

在使用stringFromDate初始化strStartDate后,您需要在strStartDate上进行保留。该调用的结果将自动释放,因此您需要保留以停止释放对象。

它的发生是因为strStartDate变量中没有存储任何值,并且它是nil(NULL)所以当你想用%@打印它时,它没有得到字符串值,所以应用程序崩溃了..

尝试先分配strStartDate = @"";然后打印它,它将起作用。

最新更新