저는 C++ 세계에서 온 초보 ObjectiveC 프로그래머입니다.홀더가 유지되는 동안 보유 된 속성의 동작
이@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
다음 코드를 고려 아니, 난이 유지 카운트 결과를 이해할 수 없다 :
/나는 다음과 같은 클래스가 말 : 나는 그것이 매우 어려운 NSObject를 제공하는 메모리 관리를 이해하기 위해 찾아
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