使用字符串崩溃应用程序。
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
也是来自日期的字符串。字符串temp
和strStartDate
都分配相同的位置,两者都是类变量,并且打印相同的位置,但在case 0
温度下打印,strStarDate
崩溃。为什么?
我知道这很简单,但我无法理解。请帮助我。
在使用stringFromDate初始化strStartDate后,您需要在strStartDate上进行保留。该调用的结果将自动释放,因此您需要保留以停止释放对象。
它的发生是因为strStartDate
变量中没有存储任何值,并且它是nil(NULL)
所以当你想用%@
打印它时,它没有得到字符串值,所以应用程序崩溃了..
尝试先分配strStartDate = @"";
然后打印它,它将起作用。