2016-09-12 4 views
-4

나는 ARC에 대해 읽었으며 모든 컴파일러가 지원하는 것은 아닙니다. 그래서 저는 델파이가 모든 시나리오에서 메모리를 관리하는 동일한 방법이 아니라고 생각합니다. 맞습니까? 컴파일러에 따라 다릅니다.델파이 ARC 컴파일러 메모리 관리

나는 이것을 봤지만 "고전적인"델파이와 ARC 델파이 사이의 메모리 관리의 차이점을 이해하기가 어렵다. 내가 이해 한대로 Free이 자동으로 호출되므로 코드의 차이점은 무엇입니까?

가능하면 코드 예제를 제공해주십시오.

Automatic Reference Counting in Delphi Mobile Compilers을 : 모든

+0

무료 사용 여부를 알고 싶습니까? –

+0

그 이유는 내가 사용할 수 없기 때문에 무언가를 속일 필요가 있기 때문입니다 ... 그러나 try-finally 블록이 올바르게 보이지 않습니까? –

+0

왜 이걸 downvote? –

답변

3

첫째, 난 당신이하지 이미 가지고있는 경우, 문서를 보면 좋습니다.

여기에서이 주제에 대한 전체 설명을 볼 수 있습니다. 델파이


자동 참조 계산

메모리 관리는 항상 당신이 ARC 지원 컴파일러를 사용하는 경우, 일을 변경하려는 때문에 동일하지 않습니다.

ARC는 사용자가 필요하지 않은 개체에 대해 걱정할 필요없이 개체의 수명을 관리하는 방법입니다.

이것은 일반적으로 내가 try-finally 블록 내부에 코드를 삽입 할 필요가 여기에 객체 ( ARC)

var 
a: TMyNiceClass; 
begin 

a := TMyNiceClass.Create; 
try 
    a.somethingToDo(); 
finally 
    a.Free; 
end; 

end; 

을 사용하는 방법, 그래서 때 내 객체가 사라질 것이라고 확신 더 이상 필요하지 않습니다 (그리고 메모리 누수를 피하십시오). 당신이 "자동"이기 때문에 try-finally를 사용 Free 할 필요가없고, 어느 쪽도하지 않기 때문에 위의 코드는, ARC에서 잘 작동

var 
a: TMyNiceClass; 
begin 

a := TMyNiceClass.Create; 
a.somethingToDo(); 

end; 

대신 ARC에서. 또한 소멸자는 끝에 도달하면 호출됩니다. 문을 사용하지만 끝나기 전에 개체 사용을 중지하려면 a := nil을 사용할 수 있습니다. Free를 호출 전통적인 스타일에서

주, ARC 스타일의 Free는 개체 = 전무에 대한 참조를 할당 (객체에 대한 참조가 전무했다하지 않는 한) 소멸자를 호출합니다.

+0

좋습니다. 그러나 메모리 누수는 힙에있는 것입니까? 자유 시장은 어쩌고? –

+0

많은 양의 객체를 호출하지만 해제하지 않으면 메모리 누수가 발생합니다. FreeAndNil은 객체를 해제 한 다음 참조를 nil로 설정합니다. –

+0

그리고 무엇이 자유롭고 자유로운가? –

-2

ARC는 Delphi 컴파일러에서 구현 된 것처럼 혼동을 줄 수 있습니다. 불필요한 호환성 차단기입니다.

오른쪽으로 만들려면 책이 필요할 수 있습니다 : Delphi Memory Management For Classic And ARC Compilers.커버의 4에서

추출 :

델파이는 자신의 메모리 관리 논리와 유형뿐만 아니라 다양한 클래스에 대해 서로 다른 메모리 관리 시스템을 제공하는 컴파일러의 두 세트를 제공합니다. 특정 유형의 ARC를 제공하면서 수동 메모리 관리를 사용하여 -

  • 클래식 델파이 컴파일러는 현재 Windows와 OSX 플랫폼에서 지원.
  • 모바일 안드로이드 및 iOS 플랫폼에서 지원되는 차세대 ARC Delphi 컴파일러 및 Linux - 전체 ARC 사용 - 자동 참조 메모리 관리 시스템 계산.

각 메모리 관리 시스템에는 좋은면과 나쁜면이 있습니다. 각각은 몇 가지 문제에 대해 솔루션을 제공하지만 다른 범위의 다른 문제를 생성합니다. 그리고 각각 약간 다른 코딩 패턴과 사례가 필요합니다. 장점과 약점을 파악하고 메모리 관리 시스템이 작동하는 방식을 이해하면 버그가없고 유지 보수가 쉬운 코드 을 작성하는 것이 좋습니다.

+0

개인적인 의견과 복사/붙여 넣기에 감사드립니다. –

+0

책을 이해해야하고 위의 질문에 답하는 경우 ARC가 혼란 스럽다는 사실이 사실입니다. 복사하여 붙여 넣기는 그 자체로 식별되며 전체 요점을 아주 잘 요약 한 것입니다. –