-3

私はNSDate文字列オブジェクトにうんざりしています。現在、次のベースに基づいて一意の ID を生成してNSDateいます。

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

4 に答える 4

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]];
于 2012-12-31T12:13:20.670 に答える
1

stringWithString は自動解放文字列を作成し、コードを次のように変更します

NSString  *   current_Test_id = [[NSString stringWithString:unique_id]retain];
于 2012-12-31T12:14:51.403 に答える
0

init メソッドではなく、クラス メソッドで作成された NSString (または任意のオブジェクト) は自動解放されます。これは、イベント ループの次の繰り返しでcurrent_Test_id解放され、デッド オブジェクトへのポインタを取得したことを意味します。

この同様の質問を参照してください

于 2012-12-31T12:12:26.117 に答える
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];
于 2012-12-31T12:14:53.620 に答える