@interface DataMode : NSObject {
NSString * name;
}
@property (retain) NSString * name;
- initWithName:(NSString *)name_;
@end
@implementation DataMode
@synthesize name;
- initWithName:(NSString *)name_
{
if ([super init] != nil)
{
name = name_;
return self;
}
return nil;
}
@end
- (void) pressed:(id)sender
{
NSString * str = [NSString stringWithFormat:@"zhang"];
DataMode * a = [[DataMode alloc] initWithName:str];
a.name;
a.name;
a.name;
a.name;
a.name;
NSLog(@"name count:%d",[a.name retainCount]);
[ a release];
NSLog(@"str count:%d",[str retainCount]);
}
@end
the output is
name count:7
str count:7
그러나 코드는 메모리를 누설하지 않습니다. 나는 누수와 Active monitor tool의 결과를 얻는다. 새로운 보유 발견 또는 오해?
는누군가가 말을 놀라운
때문에 내가 시작 "이름을 @property (유지);" eaual 아래의 동일한 방법. 그 .IT 출력의 상기 reslut를 설명 할 수없는 경우
- getname
{
return name;
}
는
난있어서 너무
- getname
{
[name retain];
[name autorelease];
return name;
}
그래서이 누출 높은 숫자 7을 설명 할 수없고한다고 생각 모든 메모리.
이것은 내 생각입니다. 너무 많은 시간을 필요로합니다. 나는 부끄러워.
내 이해가 맞습니까 ??? 귀하의 게시물과 의견을 환영합니다.
실수로 'retainCount'를 사용하여 메모리 관리를 점검하고 있습니다. 코드가 멋지게 보인다. alloc과 릴리스의 균형을 잡았다. 인스 트루먼 트는 누수가 없다는 것을 알려줍니다. 그것이 당신이 걱정할 필요가있는 전부입니다. – Abizern
사실 나는 그의 생성자에 문제가 있습니다. 그는 "self.name"대신 "name"을 사용합니다. 실제로이 변수를 내부 변수와 속성으로 할당한다고 생각합니다. 따라서 유지되지 않습니다. 누수가없는 유일한 이유는 stringWithFormat을 사용했기 때문입니다. –
개인적으로 나는 이니셜 라이저에서'name = [name_ copy]'를 사용하고 dealloc에서'name'을 릴리즈해야한다고 생각합니다.'init' 함수에서'self '를 호출하는 것은 일반적으로 좋은 생각이 아닙니다. – Abizern