2012-06-25 2 views
0

, 나는 어떻게 재산 작품에 대한 명확하지 여전히 다양한 문서 만을 읽고 다음과 같이 줘요 내가 하나 개의 속성을 생성하는 하나의 샘플 응용 프로그램을 만들어 혼동 시나리오 건너 온 :재산은 어떻게 작동합니까? 내가 부동산에 관한 배우는

@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]; 

? 속성이 실제로 어떻게 작동하는지 설명 할 수 있습니까? 속성을 사용하면 메모리가 할당되고 해제되는 방식은 무엇입니까?

답변

1

첫 번째 질문, 당신은 당신이이 변수를 주면 다음, 주어진 인스턴스를 할당 (또는 유지)해야 할 속성에 변수 자체 인스턴스를 설정하고 있지 않기 때문에

오토 릴리즈 객체는 나중에 재산에는

두 번째 질문

없음은하지의 좀비가되지 않습니다 imilar는 이미 인스턴스를 보유하고 있으므로 다른 보유는 보유 수를 추가로 늘리므로 추가로 보유 할 수 있습니다.

세 번째 질문

는 내가 그것을 여기

샘플이 속성 setter

유지되는 자동 해제 인스턴스를 전달 아무 문제가 없을 것입니다 그래서이 건물은 인스턴스를 유지합니다 말했듯
- (void) setProperty:(BookItem *)prop 
{ 
    if(_property != prop) 
    {  
     [_property release];//release old 
     _property = prop; 
     [prop retain]; //retain new 
    } 
} 
+0

빠른 답변 주셔서 감사합니다. 의심의 여지가 많이 있습니다.하지만 첫 번째 질문에서는 속성을 사용하지 않았으므로 인스턴스 변수를 직접 사용했습니다. 이 경우 이전 인스턴스가 해제되지 않습니다. –

+0

예. 그렇지 않습니다. 당신이 맞다 나는 그것을주의하지 않았다, 당신이 그 자체로 변수를 설정하기를 원한다면, 당신은 할당해야 할 것이다. 왜 누출을받지 못하는가. –

+0

내가 정교하게 만들어 줄 수 있니? –

관련 문제