如何使用nsdata字符串对象供以后使用?

时间:2012-12-31 12:03:05

标签: objective-c nsdate nsdateformatter

我对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,则应用程序崩溃。

4 个答案:

答案 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被释放,现在你有一个指向死对象的指针。

请参阅this similar question

答案 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];