2011-07-02 4 views
1

해제에 대한 쿼리 나 메모리 관리에 대한 일반적인 쿼리를목적 C : 인스턴스 속성

//In .h file I defined a property 
@interface AClass 
{ 
    someClass *aProperty; 
} 

@property (nonatomic, retain) someClass *aProperty; 

end 



//In .m file I synthesized the property and also initialized the property 
@implementation AClass 

-(void)aMethod 
{ 
    self.aProperty = [[someClass alloc]init]; 
} 

내 질문에 내가 '릴리스'메모리를 방지하기 위해해야합니까 'aProperty'에 대한

입니다 새는 곳? 일반적으로 점 표기법을 사용하여 인스턴스 속성을 이해합니다. 'dealloc'및 'viewdidunload'메소드에서 릴리스합니다. 하지만이 인스턴스의 경우 'aMethod'메서드 내에서 aProperty를 다시 릴리스해야합니까?

답변

4
  1. 당신은 의 dealloc
  2. 귀하의 속성 초기화에서 인스턴스를 해제해야 메모리 누수. 당신은 alloc + init을 수행하고 속성 내에 유지하지만 해제하지는 않습니다. 보통 과 같은 것을 사용합니다.
2

당신은 AClass 자동으로 retain의 재산 aPropertyretain

@property (nonatomic, retain) someClass *aProperty; 

의 모든 인스턴스를 가지고 있기 때문에. 따라서 방법에서 [aProperty release]으로 전화하여 AClass으로 전화해야합니다.

aMethod을 호출 할 때마다 이전 인스턴스를 해제하지 않고 someClass의 새 인스턴스를 만듭니다. 이것은 거대한 유출을 초래할 것입니다. 두 가지 방법 중 하나로이 문제를 해결할 수 있습니다. 이전 aProperty 값을 해제하거나 autorelease에 대한 통화를 추가하십시오.