これを使用すると問題が解決します...
NSString *str=[NSString stringWithFormat:@"Hello"];
NSLog(@"\n\nstr = %@",str);
str = nil;
str=@"asdasd";
NSLog(@"\n\n new str = %@",str);
あなたが知っておくべきこのいくつかの基本..
NSString *s1 = @"string1";
NSString *s2 = [[NSString alloc] initWithString:@"string2"];
NSString *s3 = [NSString stringWithFormat:@"string3"];
この場合の s1 は、定数文字列へのポインタです。s2 と s3 はどちらも作成した新しい文字列を指していますが、s2 は保持されており、s3 は自動解放されています。一時的なオブジェクトだけが必要な場合は、自動解放されたオブジェクト s3 または定数オブジェクト s1 が適しています。文字列を保持する必要がある場合は、s2 を使用する必要があります (実際、この場合でも s1 が機能することを考えると、実際には慣用的ではありません)。
保持メッセージを送信することで、s1 または s3 を s2 と同等にすることができます。autorelease メッセージを送信して、s2 を同等のオブジェクトにすることもできます。