下面是一本書的代碼片段。爲什麼serialNumber
在[serialNumber release];
之後仍然會設置爲新值?與object-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;
}
release只是將refCount減少爲-1。它不假定變量將被釋放。閱讀[內存管理](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/) – beryllium 2012-03-22 10:23:24
'copy'等同於'retain'用於不可變的字符串 - 不需要這個'if' 。 – hamstergene 2012-03-22 10:24:13
最好的解決方案是聲明'@property(copy)NSString * serialNumber;','@ synthesize'並且完成它。沒有理由寫這些代碼。 – bbum 2012-03-22 16:43:27