2009-10-12 4 views
2

다음 내용이 의미하는 바를 알고 싶습니다. 나는 그것을 풀어야합니까? 나는 그것에 대한 메모리를 할당하지 않았다 . 메서드는 클래스 메서드이기도합니다. 어떤 도움이 필요합니까?정확한 보유는 무엇을 의미합니까?

object = [[class method] retain]; 

답변

5

은 이전 버전 2.0 오브젝티브 C는 추적하고 메모리를 관리 할 수 ​​reference counter 전략을 사용했다. 2.0 이후 가비지 컬렉터는 활성화 될 수 있지만 아직 iPhone에서는 사용할 수 없습니다.

Objective-C 참조 전략에 대해 here을보십시오.

이제 2011 년에는 GC 메커니즘이 ARC (Automatic Reference Counting) 메커니즘에 찬성하여 더 이상 지원되지 않을 것으로 보입니다.

Apple에서

자동 참조가 오브젝티브 C에 대한

자동 참조 카운팅 (ARC)를 계산하는 것은 메모리 관리를 컴파일러의 작업을합니다. 새로운 Apple LLVM 컴파일러로 ARC를 활성화하면 다시 입력하거나 다시 입력해야 할 필요가 없으므로 개발 프로세스가 대폭 간소화되고 충돌 및 메모리 누수가 줄어 듭니다. 컴파일러는 개체를 완벽하게 이해하고 더 이상 사용되지 않는 즉시 각 개체를 릴리스하므로 예측할 수 있고 부드러운 성능으로 응용 프로그램이 이전과 같이 빠르게 실행됩니다.

+0

우리는 "object = [[class method] retain];"을 사용할 수 없다는 것을 의미합니다. in iPhone –

+0

아니요. iPhone에서는 retain/release를 사용해야합니다. 아마도 조금 혼란스러워 할 것입니다. 보관/해제가 진행 중입니다. 어떤 사람들은 그것을 좋아하고, 다른 사람들은 그렇지 않습니다. – epatel

+0

Xcode 4.2부터는 자동 참조 계산 (ARC)이 iOS 4 및 5에서 사용 가능합니다. 기본적으로 코드에 retain/release를 다시 쓸 필요가 없습니다. –

2

가정 "방법"은 (신규 또는 사본 메서드가 호출되지 않는 한 ALLOC) 호출자의 범위 동안 autoreleased 참조, 또는 유효 보장 뭔가 하나를 반환됩니다 규칙을 따르고있다. 따라서 보유 변수가 없으면 참조는 즉각적인 호출 컨텍스트에서 유효해야하지만 인스턴스 변수에서이를 유지하려면 유지가 필요합니다.

그래서 호출의 직접적인 상황에서만 "객체"를 사용한다면 retain이 필요하지 않습니다.

카운트를 유지하려는 경우 의미에 익숙해 져야합니다. 웹에는 여러 가지 적절한 참조가 있지만 the one epatel has already given, which is another stackoverflow question을 반복하겠습니다.