0

우선 ARC를 사용하고 있습니다.메모리 관리 및 정적 CoreFoundation 변수

나는 예를 들어, 다음과 같습니다, 클래스가있는 경우 :

static CFNumberRef numberRef = NULL; 

+ (void)initialize { 
    float myFloat = 28.37202; 
    numberRef = CFNumberCreate(kCFAllocatorDefault, CFNumberFloatType, &myFloat); 
} 

어떻게 numberRef 방출에 대해 갈 것입니까?

+0

이것은 싱글 톤처럼 보입니다. 따라서 그것을 싱글 톤으로 취급하십시오. 전혀 릴리스하지 마십시오. 앱이 종료되면 커널이 모든 메모리를 정리합니다. –

+0

@ H2CO3 그게 옳은 대답이라고 생각하고, 충분히 볼 수있는 누출은 없습니다. –

+0

나중에 참조 할 수 있도록 대답했습니다. –

답변

1

사용중인 패턴이 싱글 톤을 만들고 관리하는 방식과 닮았 기 때문에 객체를 실제 싱글 톤으로 처리 할 수 ​​있다고 말하고 싶습니다. 즉, 출시 할 필요가 없습니다. (개인적으로, 나는 Objective-C/Cocoa에서 공유 인스턴스를 공개하는 것을 신경 쓰지 않는 싱글 톤 구현을 본 적이 없다). 이 동작은 응용 프로그램의 수명이 다할 때까지 객체가 필요하다는 사실과 일치합니다. 프로세스를 종료하면 커널은 획득 한 모든 리소스를 정리해야합니다.

0

모든 coreFoundation은 기본적으로 assign -ed이므로 보존되지 않으므로 방출 할 필요가 없습니다.

명확하게 말하면 ARC는 Core Foundation 객체에 아무런 영향을 미치지 않습니다. 자동으로 관리하지 않으므로 manually manage이 필요합니다.

calloc/malloc으로 자신의 메모리를 생성 한 경우 free이 필요합니다.

편집 :

Q : 난 그냥도 ARC와 함께, 우리는 여전히 CFRelease()와 같은 CGContextRelease (컨텍스트)와 같은 자료의 다른 종류의 일에 대해 걱정할 필요가 ... 명확하게 이해 할;

답변 : 맞습니다. ARC는 ObjC 개체 만 처리합니다. Core Foundation 객체에 대해서는 아무것도 모릅니다.

+0

어쩌면 명확하지 않지만 CFRelease를해야만하는 부분에 대해 이야기하고 있습니다. –

+0

내 편집을보고 아직도 명확하지 않다. 나를 찌르지 않는다. :) –

1

더 이상 필요하지 않은 어딘가에 놓아 두십시오. 나는 당신이이 클래스들을 많이 가지고 있고 항상이 메모리를 필요로하기 때문에 정적이라고 생각하고 있습니까? 나는 applicationWillTerminate에서 제안 할 것입니다. 클래스가 많지 않고 항상 메모리가 필요하지 않은 경우 static으로 선언 할 필요가 없습니다.

+0

'UITableViewCell' 케이스에서'drawRect'가 초당 여러 번 호출되는 곳에서 사용하고 있습니다. AppDelegate 외부의'applicationWillTerminate :'에서 어떻게 풀어 주겠습니까? –

+0

정적이 아닌 const가 필요한 것 같습니다. – estobbart

+0

@BoA : 많은 응용 프로그램 대리자 메서드가 알림에 해당합니다. 그 중 하나입니다. [UIApplicationWillTerminateNotification] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/c/data/UIApplicationWillTerminateNotification)입니다. –