2016-12-02 1 views
2

나는 C#으로 약 using(){}을 발견 -> Uses of "using" in C#C#에서 using() {...}을 사용하면 Cocoa에서 autoreleasepool {...}과 같은 목적을 수행합니까?

내가 코코아는 ARC를 사용하고 C 번호는 GC를 사용하기 때문에 autorelease{}using(){} 같은 아니라는 것을 알고있다. -> Is it necessary to use autoreleasepool in a Swift program?

실제로 동일한 목적을 수행하는 경우 두 사람을 사용했던 누군가로부터 확인하고 싶습니다.

편집 : 이러한 아이디어를 함께 연결하는 제 3 자 C# 컴파일러를 발견했습니다.

RemObjects C#은 (__autoreleasepool) 구문을 사용하여 자동 릴리스 풀의 (거의 필요하지 않은) 수동 선언을 지원합니다.

http://www.elementscompiler.com/elements/hydrogene/cocoa.aspx

는 C#에서 using(){...} 코코아에 autoreleasepool{...}과 같은 목적을 제공합니까?

+0

이 링크에는 다음과 같은 내용이 나와 있습니다. RemObjects C#은 (__autoreleasepool) 구문을 사용하여 (거의 필요하지 않은) 자동 릴리스 풀의 수동 선언을 지원합니다. – CodingYoshi

답변

3

아니요, 이들은 다릅니다.

C#의 using 문은 자원을 확보하고 처리하는 것에 관한 것입니다. 이것은 일반적으로 파일과 같은 외부 리소스로 파일을 열면 파일을 열어서 처리가 종료됩니다.

Objective-C의 자동 릴리스 풀은 메모리 개체의 수명을 제어합니다. 풀에 배치 된 객체는 풀이 비울 때 해제됩니다. 기본 풀의 경우 이벤트 루프 반복마다 끝납니다.

+0

따라서 autoreleasepool은 범위를 벗어나는 오브젝트의 부작용으로 자원을 해제 할 수 있습니다. C#의 using() 특정 사용은 리소스를 처분 (연결을 닫는 등)하지만 개체 메모리를 회수 할 수 있다는 GC를 알리는 부작용이 있습니까? – masters3d

+1

C#'using '은 GC와 직접 연관되어 있지 않습니다. 자원 획득 *은 개체 생성을 포함 할 수도 있지만 필요하지 않습니다. 자원 처리는'Dispose()'를 호출하고, 객체가 더 이상 필요하지 않다는 것을 GC에 알리지 않으며, 객체 *는 계속 사용될 수 있습니다. 'Disposable'을 구현하는 객체는 finalizer의 일부로 자체 Dispose()를 호출 할 필요가 없습니다. '사용'의 일반적인 사용은 자원 객체의 할당과 할당 취소를 포함 할 수 있지만 사용 패턴과 요구 사항은 아닙니다. – CRD

관련 문제