, 나는 어떻게 재산 작품에 대한 명확하지 여전히 다양한 문서 만을 읽고 다음과 같이 줘요 내가 하나 개의 속성을 생성하는 하나의 샘플 응용 프로그램을 만들어 혼동 시나리오 건너 온 :재산은 어떻게 작동합니까? 내가 부동산에 관한 배우는
@property(nonatomic,retain)NSString *strValue;
과 그것을 합성 :
@synthesize strValue;
1) 첫 번째 시나리오 :있는 viewDidLoad에서
가 내가 쓴 :
strValue = [[NSString stringWithFormat:@"value"] retain];
는 할당 해제에 나는 썼다 :
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
그것은 여기에 어떤 leak.My 질문없이 잘 작동입니다 : 내가 보유 재산 strValue의 (@property (비 원자, 유지)는 NSString을 만들 때 유지되는 메모리에 무슨 일이 * strValue;)?
2) 제 2 시나리오 : viewDidLoad에있어서
내가 썼다 할당 해제에
self.strValue = [[NSString stringWithFormat:@"value"] retain];
는 I 쓴 : 그것은 self.strValue = [있는 NSString stringWithFormat에서 메모리 누출을 보였다
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
: @ "value"] retain] line.Question 여기에 : 왜 메모리 누수가 여기에 표시됩니까?이 줄은 다음 코드 줄과 같지 않습니다 :
[strValue release];
[strValue retain];
3) 세 번째 시나리오 : 있는 viewDidLoad에서 내가 쓴 :의 dealloc에서
self.strValue = [NSString stringWithFormat:@"value"];
가 내가 쓴 : 그것은 어떻게 어떤 메모리 누수 또는 매달려 참조없이 잘 작동
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
? 속성이 실제로 어떻게 작동하는지 설명 할 수 있습니까? 속성을 사용하면 메모리가 할당되고 해제되는 방식은 무엇입니까?
빠른 답변 주셔서 감사합니다. 의심의 여지가 많이 있습니다.하지만 첫 번째 질문에서는 속성을 사용하지 않았으므로 인스턴스 변수를 직접 사용했습니다. 이 경우 이전 인스턴스가 해제되지 않습니다. –
예. 그렇지 않습니다. 당신이 맞다 나는 그것을주의하지 않았다, 당신이 그 자체로 변수를 설정하기를 원한다면, 당신은 할당해야 할 것이다. 왜 누출을받지 못하는가. –
내가 정교하게 만들어 줄 수 있니? –