문제

코코아 터치 플랫폼에서 응용 프로그램을 개발하는 법을 배우고 있습니다. 나는 먼 길을 왔지만 머리를 감쌀 수없는 한 조각은 메모리 관리입니다.

나는 처음부터 시작하려고 시도하기보다는 비교 경로를 가져갈 것이라고 생각했다. CLR (.NET)과 Objective-C 2.0의 차이점에 대해서는 많이 찾을 수 없으므로 스택 오버플로 커뮤니티 가이 질문에 도움이 될 수 있는지 궁금합니다.

Objective-C 2.0과 CLR 간의 메모리 관리의 핵심/중요한 차이점은 무엇입니까? Objective-C 2.0과 관련하여 iPhone OS에서 개발 중이며 자동 제출 기능은 권장되지 않습니다.

.NET 배경에서 왔기 때문에 Objective-C 2.0 메모리 관리에 대해 알아야 할 사항은 무엇입니까?

모두 감사합니다!

도움이 되었습니까?

해결책

CLR은 가상 머신에서 실행됩니다. 객체의 모든 거래는 쓰레기 수집 시스템에 의해 처리됩니다. 일반적으로 Objective-C 메모리에서는 이전 C 스타일 Malloc/Free 또는 RETAIN/RELEART의 참조 계산 시스템을 통해 수동으로 관리해야합니다. 표준 "C"배경에서 온다면이 기술이 너무 이외의 것처럼 보이지 않습니다.

참조 계산을 사용하면 시스템은 특정 객체가 사용되는 횟수를 계산합니다. 이것은 기본적으로 위에서 언급 한 "retain"입니다. 객체를 사용하여 작업이 수행되면 개체는 수동으로 "릴리스"메시지를 보내는 "릴리스"메시지를 보냅니다. 객체의 고정 카운트가 1 씩 줄어 듭니다. 카운트가 0에 도달하면 시스템은 자동으로 객체를 처리합니다. 이것은 CLR/.NET에 비해 매우 번거로운 것처럼 보이지만 그 메커니즘은 더 나은 성능과 더 많은 제어를 제공합니다.

Macintosh의 Objective-C 2.0으로 코딩하는 경우 Xcode의 옵션을 통해 쓰레기 수집을 활성화 할 수 있기 때문에 운이 좋을 것입니다. 이것은 CLR이 제공하는 것에 더 가깝습니다. iPhone에서 개발중인 경우 쓰레기 수집은 메모리 및 CPU 측면에서 너무 많은 비용이 들기 때문에 옵션이 아닙니다. 메모리는 수동으로 관리해야합니다.

다행히도, 객체에 "자동 제출"메시지를 보내고 "자동 제출"메시지를 보내는 것이 일반적으로 사용되는 중간 옵션이 있습니다. Macintosh와 iPhone에 모두 포함 된이 메커니즘은 기본적으로 객체를 글로벌 사전 (실제로 자동 제출 풀이라고 함)에 할당했습니다. 응용 프로그램이 존재하거나 수영장이 배수되면 물체가 해체됩니다. 그러나 모든 것이 AutoreLease Pool에 들어가는 것은 아닙니다. 모든 것을 거기에두고 싶지는 않습니다. Apple 사이트의 Objective-C 2.0 프로그래밍 언어의 건조하지만 중요한 독서를 권장하는 것이 좋습니다.

http://developer.apple.com/documentation/cocoa/conceptual/objectivec/introduction/introobjectivec.html

행운을 빕니다. 인내심이 있습니다. Objective-C는 .NET (25 세 이상)과 같은 블록의 새로운 아이는 아니지만 .NET가 포함되기 시작한 놀라운 기능이 있습니다.

다른 팁

iPhone에서는 수동입니다. 메모리를 할당하거나 유지하는 경우 메모리를 해제해야합니다.

.NET CLR에서 당신은 메모리가 어떻게 또는 객체가 무엇을하고 있는지 신경 쓰지 않습니다.

iPhone의 경우 모든 객체 할당의 균형을 맞추고 릴리스를 시작하거나 유지해야합니다. iPhone은 간단한 참조 계산 메커니즘을 사용함에 따라 카운트가 0으로 떨어지면 물체가 정리됩니다.

내가 익숙해 져야 할 한 가지는 자동으로 유지하는 속성을 가질 수 있다는 것입니다. 따라서 객체를 만들면 속성에 할당하면 2의 카운트가 있습니다. 더 잘 작동하는 것은 객체를 임시 변수 속성에 지정된 다음 온도 변수를 해제하여 카운트를 1로 내립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top