문제

iPhone 애플리케이션 개발이 끝날 때까지 올라 오면 iPhone을 개발할 때 AutoreLease를 사용하는 것이 얼마나 나쁜지 궁금합니다. 나는 상당히 임의의 충돌에 직면했으며 지금까지 나는 멍청한 메모리 사용 이외의 다른 것에 정확히 찾아 낼 수 없습니다.

코코아 초보자로서 나는 처음에 iPhone의 수동 유지/릴리스에 찬성하여 자동 제출을 피할 것을 강력하게 제안한 가이드 라인 문서를 읽은 것을 기억합니다. 그러나 더 많은 '시니어'코코아 개발자가 일찍 자극 제출을 사용한 (아이러니하게도 놓아 온 사람) 일찍 탑승했습니다. 물론, 나는 "Monkey See Monkey do"모드로 들어갔고, 그것은 나를 괴롭히기 위해 돌아 오는 것으로 보인다 (나는 지금 프로젝트에서 유일한 개발자이다).

그래서 다음에 무엇을해야합니까? 코드를 분기하고 가능한 경우 자동 제출 코드가 손가락을 건너는 상태를 유지하고 교체하려고 노력해야하는 것 같습니다. 많은 라이브러리 통화로 인해 stringwithformat과 같은 자동 조종 된 객체와 내가 직접 사용하지 않는 곳에있는 것 같습니다. 내가 찾아야 할 다른 Gotchyas 및/또는 제안이 있습니까? 고마워 코코아 전문가.

도움이 되었습니까?

해결책

AutorELEASE 대신 릴리스를 사용하면 타이트한 지점에서 메모리 사용량을 향상시킬 수 있지만 (iPhone에서는) 유지 / 릴리스 규칙을 따르지 않으면 충돌에 전혀 도움이되지 않습니다. 당신이해야 할 일에 대해 약간 흐릿하다면 OBJ-C의 메모리 관리에 대한 몇 가지 튜토리얼을 읽은 다음 디버거 및 충돌 보고서를 사용하여 충돌을 한 후에 객체를 공개하는 곳을 찾으십시오. . 이것 그리고 이것 시작하기에 좋은 두 곳입니다.

다른 팁

AutoreLease 또는 Manual Release 선택보다 더 중요한 것은 얼마나 자주 귀하가 alloc 그리고 dealloc 당신의 NSAutoreleasePool에스. 대부분의 코코아 프레임 워크가 사용하기 때문에 autorelease 자유롭게, 당신은 적절한 수영장 배수 전략이 필요합니다. 그것이 제자리에 있으면 release 또는 autorelease 훨씬 적은 문제가됩니다.

즉, 걱정해야 할 유일한 영역은 단단한 루프입니다. NSAutoreleasePool 최상의 결과를위한 몇 가지 반복; 그리고 당신이 다른 것을 낳았을 때 NSThread 그것은 런 루프가 없습니다-수영장을 창조하고 배수하는 경우가 종종 유휴 상태가됩니다. 대부분의 응용 프로그램은 이벤트 당 소량의 데이터 만 할당하므로 UIKit이벤트가 발송되기 전에 수영장을 할당하는 전략은 디스패치 반품 후에이를 공개하는 것이 매우 잘 작동합니다.

AutoreLease를 사용하는 방법을 Dunno라고 생각하지 않으면 iTunes u-> 강의 번호 4에서 CS193p 가을 2010을 확인하십시오.

메모리 관리 및 물건에 대해 모두 가르쳐줍니다 (처음 10 분 정도 건너 뛸 경우)

iPhone 성능의 이유로 Apple은 가능할 때마다 AutorEled 객체를 사용해서는 안된다고 제안합니다. 대신, 당신이 그들과 함께 할 때 객체를 명시 적으로 풀어주십시오.

AutoreLease Pool을 사용한다는 것은 사용하지 않은 메모리를 남겨두고 있음을 의미합니다. iPhone은 주변을 둘러 볼 메모리가 적기 때문에 자동 제출을 기다리는 동안 자원을 차지하는 동안 가능한 한 빨리 불필요한 메모리를 확보하면 성능을 향상시킬 수 있습니다.

당신이 자동 제출을 할 때, 당신은 기본적으로 다음과 같이 말합니다. "더 이상 필요하지는 않지만 다른 사람은 (자동 릴리스 풀이 배수되기 전에) 자유롭게 선택할 수 있습니다." 당신이 말하는 객체를 명시 적으로 재 재가 할 때 : "더 이상 필요하지 않으며 다른 사람이 이미 다른 사람이 (획득 한) 말하지 않으면 즉시 거래해야합니다."

결과적으로, 자동 제국은 일반적으로 잘못된 것이 아닙니다. 발신자가 객체를 방출하지 않고 객체를 메시지 발송자에게 전달하려는 경우 필요합니다.

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