Objective c 目标c错误捕捉
我是obj-c新手,需要一些代码方面的帮助Objective c 目标c错误捕捉,objective-c,iphone,Objective C,Iphone,我是obj-c新手,需要一些代码方面的帮助 NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"]; NSDate *date = [dateFormatter dateFromString:currentDate]; 变量日期不能为零。当无法格式化字符串时,如何使日期=当前
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:currentDate];
变量日期不能为零。当无法格式化字符串时,如何使日期=当前时间?
我可以用try/catch吗?如何做?可以尝试以下方法:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"];
NSDate *date = nil;
@try
{
date = [dateFormatter dateFromString:currentDate];
}
@catch (NSException *exception)
{
date = [NSDate date];
}
你可以试试这个:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"E, d LLL yyyy HH:mm:ss Z"];
NSDate *date = nil;
@try
{
date = [dateFormatter dateFromString:currentDate];
}
@catch (NSException *exception)
{
date = [NSDate date];
}
这不应该起作用:
NSDate *date = [dateFormatter dateFromString:currentDate] || [NSDate date];
这不应该起作用:
NSDate *date = [dateFormatter dateFromString:currentDate] || [NSDate date];
为什么不检查格式化程序返回的日期,如果为零,则为其指定当前日期
NSDate *date = [dateFormatter dateFromString:currentDate];
if (!date)
date = [NSDate date];
或使用三元运算符的1-liner(及其gcc扩展):
为什么不检查格式化程序返回的日期,如果为零,则为其指定当前日期
NSDate *date = [dateFormatter dateFromString:currentDate];
if (!date)
date = [NSDate date];
或使用三元运算符的1-liner(及其gcc扩展):
您不应该这样做
NSDateFormatter*dateFormatter=[[[NSDateFormatter alloc]init]autorelease]代码>因为自动释放使对象生存期不确定。省略自动释放
,并在处理完对象后释放它。(如果您不确定:当您将对象赋给启用了retain
的属性时,您经常会看到这样的分配(使用自动释放)您不应该这样做NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init]autorelease]代码>因为自动释放使对象生存期不确定。省略自动释放
,并在处理完对象后释放它。(如果您不确定:当您将对象赋予启用了retain
的属性时,您经常会看到这样的分配(使用autorelease)结果[dateFormatter dateFromString:currentDate]|[NSDate date date]是BOOL,不是吗?不,不是afaik,它将是[dateFormatter dateFromString:currentDate]
,或者如果结果为布尔值false(nil
,在本例中),则为[NSDate date]
。我刚刚用JavaScript测试了它,它在那里工作,但我不能100%肯定地说它在(目标-)C中工作相同。@Douwe:在(目标-)C中总是int
。不要假设JavaScript==C。不,它不一样:)你必须需要三元运算符来做你想做的事情(见我的答案)@KennyTM好的,不会再这样做了:)只是我在JS中遇到了这个问题,我认为它在大多数编程语言(如果不是所有编程语言的话)中都能工作。看起来我错了,[dateFormatter dateFromString:currentDate]|[NSDate date]的结果是BOOL,不是吗?不,不是这样,它要么是[dateFormatter dateFromString:currentDate]
,要么是布尔值false(nil
,在本例中),要么是[NSDate date]
。我刚刚用JavaScript测试了它,它在那里工作,但我不能100%肯定地说它在(目标-)C中工作相同。@Douwe:在(目标-)C中总是int
。不要假设JavaScript==C。不,它不一样:)你必须需要三元运算符来做你想做的事情(见我的答案)@KennyTM好的,不会再这样做了:)只是我在JS中遇到了这个问题,我认为它在大多数编程语言(如果不是所有编程语言的话)中都能工作。看起来我错了。这很糟糕,因为@try
块中返回的对象是自动删除的,而@catch
块返回的对象不是。您最好使用@catch
块中的[NSDate date]
。@paul[NSDate date]在内存管理方面有什么不同?im new.@Yaso当您使用alloc/init表单创建对象时:[[NSDate alloc]init]
内存在堆上分配(想想Cmalloc
或C++/Java/C#new
操作符),您负责以后释放它。苹果公司的惯例是将类级对象创建(在本例中为[NSDate]
)添加到自动释放池中。这将类似于在C++中在堆栈上创建对象。与堆栈对象一样,一旦指向对象的变量超出范围,自动释放对象就会被释放。@Paul:“一旦指向对象的变量超出范围,自动释放对象就会被释放。”错误,我认为自动释放对象是在调用堆栈的最后一个自动释放池耗尽时释放的。这是错误的吗?这将是错误的,因为@try
块中返回的对象是自动删除的,而@catch
块返回的对象不是。您最好使用@catch
块中的[NSDate date]
。@paul[NSDate date]在内存管理方面有什么不同?im new.@Yaso当您使用alloc/init表单创建对象时:[[NSDate alloc]init]
内存在堆上分配(想想Cmalloc
或C++/Java/C#new
操作符),您负责以后释放它。苹果公司的惯例是将类级对象创建(在本例中为[NSDate]
)添加到自动释放池中。这将类似于在C++中在堆栈上创建对象。与堆栈对象一样,一旦指向对象的变量超出范围,自动释放对象就会被释放。@Paul:“一旦指向对象的变量超出范围,自动释放对象就会被释放。”错误,我认为自动释放对象是在调用堆栈的最后一个自动释放池耗尽时释放的。错了吗?我不知道GCC扩展。非常非常酷。其他语言也有类似的功能,比如带有?
操作符的C语言。你怎么用C语言编写这个呢?我不知道GCC扩展。非常非常酷。其他语言也有类似的功能,比如C#及其?
运算符?