以下は本のコードスニペットです。 [serialNumber release];
の後にserialNumber
がまだ新しい値に設定されているのはなぜですか?オブジェクト-cメモリ管理と混同しました
- (void)setSerialNumber:(NSString *)newSerialNumber
{
NSString *newValue;
// Is it a mutable string?
if ([newSerialNumber isKindOfClass:[NSMutableString class]])
// I need to copy it
newValue = [newSerialNumber copy];
else
// It is sufficient to retain it
newValue = [newSerialNumber retain];
[serialNumber release];
serialNumber = newValue;
}
リリースでは、refCountを-1に減らすだけです。変数が割り当てを解除するとは仮定しません。 [メモリ管理](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/) – beryllium
を参照してください。 'copy'は不変の文字列を' retain'に相当します。この 'if'の必要はありません。 – hamstergene
最良の解決策は、 '@property(copy)NSString * serialNumber;を宣言し、' @ synthesize'してそれを行うことです。このコードを書く理由はありません。ありがとうございます。 – bbum