2011-01-28 3 views
0

인스턴스 변수를 해제 : 내가보기 계정을 선택하면 또한 내가 계정 목록으로 돌아 올 때언제 이렇게가는 코드가 목표 다

-(void) getAccounts { 
     accounts = [[NSMutableArray alloc] init]; 
     selAccounts=[[NSMutableArray alloc] init]; 
     NSString *url=[NSString stringWithFormat:@"https://host/accts"]; 
     processor=[[AsynConnectionProcessorController alloc] init]; 
     processor.delegate=self; 
     processor.server=self.server; 
     [processor createRequestfromURL:url]; 
} 

이보기 (계정 목록)이라고합니다 계정 세부 정보보기에서 계정 목록 페이지에서 계정을 선택하여 이동합니다. 계정 세부 정보 페이지의 목록 계정 페이지로 돌아올 때마다 '악기'에서 메모리 누수가 발생합니다. accountsselAccounts은 dealloc에서 릴리스하는 인스턴스 변수입니다. 내 질문은 다른 곳에서는 할당을 해제해야합니다. 위와 같이하면 getAccounts 함수에있을 수 있습니다. 객관적인 C의 인스턴스 변수를 해제 도움

+0

코코아/iOS 규칙 (그렇지 않은 경우)을 따르지 않는 한 메소드'get * '을 호출하지 마십시오. 이것은 단지'accounts' 또는'retrieveAccounts'이어야합니다. – bbum

답변

2

에 미리

감사합니다?

리소스를 소유하고 있으면 해제해야합니다. 지금 당신은 언제 자원을 소유합니까 -

  • 당신이 그것을 할당하면 당신은 그것을 소유하고 있습니다.
  • 복사하면 소유 할 수 있습니다.
  • 새 것으로 설정하면 소유하고 있습니다. (ALLOC/초기화에 해당) 프로그램에서

, 당신은accounts, selAccounts, processor을 해제 해야합니다.

+0

당신이 그것을 가지고 있다면 당신도 소유하고 있습니다. NARC : New/Alloc/Retain/Copy –

+0

하지만 문제는이 변수가 다른 곳에서 사용하는 인스턴스 변수라는 것입니다. getAccounts에 할당하고 위의 변수에 저장 한 데이터를 반환하는 NSURLConnection과 함께 비동기 URL 처리를 사용합니다. 클래스의 메서드간에 변수를 공유해야하는 경우 어떻게해야합니까? – sab

+0

여기의 문제는'getAccounts' 메소드를 호출 할 때마다'accounts, selAccounts, processor'를 다시 초기화하고 이전에 가리키고 있던 메모리를 남겨 두는 것입니다. 이로 인해 메모리 누수가 발생합니다. 이러한 변수가 가리키는 이러한 모든 위치를 추적해야하는 경우 배열을 유지 관리하십시오. – Mahesh

0

코드에서 개체에 대한 릴리스를 절대로 호출하지 않았기 때문일 수 있습니다. Dealloc은 객체에 대한 호출을 호출 할 때만 호출됩니다.

[yourObject release];