2013-04-09 1 views
0

공유 인스턴스 (간단한 데이터 컨트롤러)가 있고 프로젝트에서 ARC를 사용하지 않습니다.iOS에서 공유 인스턴스를 해제 할 위치

static ECOMDataController *sharedInstanse; 
@implementation ECOMDataController 
+(ECOMDataController *)sharedInstance 
{ 
    return sharedInstanse; 
} 
-(id)init 
{ 
    [self checkAndCreateDataFileIfExist]; 
    [self readAppFile]; 
    if (sharedInstanse) 
     NSLog(@"The shared instance was created already."); 
    sharedInstanse = self; 
    return self; 
} 

그리고이 같은 다른 방법에서 사용 :

나는 누출 기기에서 볼 수 있듯이
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    dataController = [ECOMDataController sharedInstance]; 
    [dataController readAppFile]; 
    [[self tableView] reloadData]; 
} 

- 내가 여기에 메모리 누수가 - 나는 데이터 컨트롤러를 해제해야 할 일 ? 그리고 그것을하는 것이 더 좋은가?

+6

싱글 톤 수업을 만드는 것처럼 들리는가요? 싱글 톤 클래스는 응용 프로그램이 실행되는 전체 기간 동안 살아 있으므로 결코 할당을 해제하지 않습니다. – rocky

+0

@rocky 감사합니다. 그것에 대해 조금 읽었습니다. 정상입니까? 나는 iOS 개발의 새 버전이다. 내 질문이 너무 어리 석다면 미안하다.) – ShurupuS

+0

정상적인가요? – rocky

답변

4

록키가 맞습니다. 당신은 싱글 톤을 할당 해제하지 않을 것입니다. 솔직하게, AppDelegate 나 NSNotificationCenter와 같은 시스템 호출을 제외하고 나는 그 패턴을 전혀 사용하지 않을 것입니다. 그 패턴을 가진 많은 함정이 있습니다 ...하지만 그것은 제 의견입니다 (비록 내가 혼자가 아닙니다).

더 중요한 것은 왜 ARC를 사용하지 않는 것입니까? 하지 않을 이유가 전혀 없으며 여러 가지 이유가 있습니다. 특히 최신 개발자의 경우 컴파일러가 자동으로 메모리 관리를 수행 할 때 소용이 없다. 더 나은 작업을 수행 할 것이다. 보유 카운트를 소홀히하지 않고 배우기에 충분합니다!

+0

감사합니다. 이것은 내 미래의 직업을위한 테스트 프로젝트입니다. 0 점에서 iOS 개발을 이해하십시오. 앱이 이전 iOS 버전과 호환되도록하려면 메모리 관리를 사용해야합니다. 이제 많은 누수가 발생했습니다 ... 그리고 어떻게이 상황을 해결할 수 있는지 이해하려고합니다 ( – ShurupuS

+0

나는 그것을 이해할 수 있습니다. 아직까지는 오래된 코드를 ARC로 변환하는 것이 상대적으로 쉽다는 것을 알고 있습니다 .XCode 메뉴에서 "Editor-Refactor-Convert to ARC"를 사용하면 대부분의 방법을 사용할 수 있습니다! 낡은 방법을 배워서 얻는 것이 아무것도 없다고 생각하십시오. ARC는 최고의 프로그래머보다 수작업을 잘 처리합니다.하지만 내 생각에. 당신까지. –

+1

@ShurupuS ARC를 사용할 수 있고 여전히 iOS 4.3을 지원합니다. . – rmaddy

관련 문제