文字列ポインタをnilに設定して解放するだけで十分です。
ARCなしで実行できるのと同じことを実行することもできますが、明示的に何も実行しない場合、ARCが(ほぼ)すべてを管理するという利点があります。
したがって、リリースするにはnilに設定し、他に何ができるか見てみましょう。
NSString* str= [[NSString alloc]initWithUTF8String: "Hello"];
// here the retain count of str is 1
__unsafe_unretained NSString* string= str;
// again 1 because string is __unsafe_unretained
void* data= (__bridge_retained void*) string;
// data retains the string, so the retain count is to 2
// This is useful in the case that you have to pass an objective-c object
// through a void pointer.You could also say NSString* data= string;
str=nil;
// Here the retain count of str is 1
NSLog(@"%@",(__bridge NSString*)data);
アップデート
オブジェクトが解放されたことに気付かないことがある理由は次のとおりです。
NSString* str= [[NSString alloc]initWithString: @"hey"];
__unsafe_unretained NSString* str2=str;
str=nil;
NSLog(@"%@",str2);
この場合、str = [[NSString alloc] initWithString:@"hey"]はstr= @ "hey"と同じですが、strは自動解放され、解放されないという違いがあります。ただし、コンパイラはstr =@"helloのコードを最適化します。 "したがって、自動リリースブロック内にいる場合は問題はなく、str2は正しく出力されます。
そのため、コンパイラの最適化を回避するために、initWithUTF8Stringを使用しました。