我对NSDate
字符串对象非常厌烦。
目前我在NSDate
的基础上生成一个唯一ID,如下所示:
NSDate *current_date = [[NSDate date]retain];
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"HHmmssddMMYY"];
NSString *unique_id=[df stringFromDate:current_date];
NSString * current_Test_id=[NSString stringWithString:unique_id];
NSLog(@"current_test_idString %@",current_Test_id);
上面的代码生成了唯一ID并成功打印,但如果我在另一个currtent_Test_id
方法中打印或访问IBAction
,则应用程序崩溃。
答案 0 :(得分:1)
使用此方法
- (NSString *)stringDateFromDate: (NSDate *) date{
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"HHmmssddMMYY"];
NSString *current_Test_id=[NSString stringWithString:[df stringFromDate:date]];
[df release];
NSLog(@"current_tst_id %@",current_Test_id);
return current_Test_id;
}
调用方法就像那样
NSString *current_tst_id = [self stringDateFromDate:[NSDate date]];
答案 1 :(得分:1)
stringWithString将创建一个自动释放字符串,将您的代码修改为
NSString * current_Test_id = [[NSString stringWithString:unique_id]retain];
答案 2 :(得分:0)
使用类方法创建的NSString(或任何对象,而不是init方法)将自动释放。这意味着在事件循环的下一次迭代中,current_Test_id
被释放,现在你有一个指向死对象的指针。
答案 3 :(得分:0)
由于current_Test_id
是实例方法。
在init(在mac os的情况下)或viewDidLoad(对于ios)中使用alloc + init。
然后分配:
current_Test_id=[NSString stringWithString:unique_id]; //it will be in autorelease mode.
或
current_Test_id=[[NSString stringWithString:unique_id]retain];