我是初學者的ObjectiveC程序員,來自C++世界。我覺得很難理解通過NSObject的提供的內存管理:/持有人保留財產時的行爲
說我有下面的類:
@interface User : NSObject
{
NSString* name;
}
@property (nonatomic,retain) NSString* name;
- (id) initWithName: (NSString*) theName;
- (void) release;
@end
@implementation User
@synthesize name
- (id) initWithName: (NSString*) theName
{
if (self = [super init])
{
[self setName:theName];
}
return self;
}
- (void) release
{
[name release];
[super release];
}
@end
沒有考慮下面的代碼,我無法理解的保留計數結果:
NSString* name = [[NSString alloc] initWithCString:/*C string from sqlite3*/];
// (1) name retainCount = 1
User* user = [[User alloc] initWithName:name];
// (2) name retainCount = 2
[whateverMutableArray addObject:user];
// (3) name retainCount = 2
[user release];
// (4) name retainCount = 1
[name release];
// (5) name retainCount = 0
在(4)處,名稱的保留數從2減少到1。但是這不正確,數組中仍有指向名稱的用戶實例! 只有在引用變量的保留計數爲0時,即只有當它被處置時,纔會釋放變量的保留計數。
工作正常!非常感謝你! – NewbiZ 2010-03-23 23:15:40