2010-03-01 4 views
1

iPhone 최적화에 관한 책, 텍스트, 게시물 또는 무언가를 찾고 있었지만 Apple 설명서를 제외하고 아무것도 찾을 수 없었습니다.iPhone 성능 최적화 모범 사례

여러분의 앱 성능을 최적화 할 때 어떤 단계를 수행하는지에 대해 이야기하는 것이 좋습니다. 지금은 앱 메모리 사용량을 향상시키고 자 노력 중이며 앱이 복잡 할 때 정말 어렵다는 것을 알아 냈습니다.

보기 작성 및 삭제를 어떻게 처리합니까? 너 혼자하고 있니? 아니면 iPhone 네비게이션 컨트롤러에 위임 해?

앱에서 메모리를 비우기 위해 어떤 트릭을 사용합니까?

+1

특정 성능 문제가있는 경우가 아니면 일반적으로 조기 최적화는 나쁜 것입니다. 또한 한 번에 하나의 응용 프로그램 만 실행할 수 있으므로 큰 문제는 무엇인지, 필요한 메모리를 모두 사용하지 않는 이유는 무엇입니까? – Nate

+0

질문을 살펴보면 최적화에 대해서는 시기상조가 없다는 것이 명백합니다.조숙 한 최적화의 문제는 그 자체로 초기 단계가 아니라, 사용 된 stategies의 실제 bottlenocecks 및 영향을 알 수없는 단계에서 완료되었지만 앱 별 최적화에만 적용됩니다. 실제로 시작부터 좋은 습관을 따르려고하는 데는 아무런 잘못이 없습니다. 사실 잘못되었습니다. 위대한 병목 현상은 마지막에 나타날 수 있지만, 저급 지방 지방 지방은 재 작성으로 만 다듬을 수 있습니다. – entonio

답변

7

메모리 사용을 최적화하려면 자동 해제 개체를 사용하지 마십시오. 개체가 더 이상 필요하지 않으면 메모리를 즉시 회수 할 수 있도록 명시 적으로 놓습니다. 그렇지 않으면 개체가 알 수없는 시간 동안 풀에 남아 있습니다.

이렇게하면 응용 프로그램의 메모리 사용은 최적화되지만 성능은 최적화되지 않습니다. 명시 적으로 개체를 해제하면 응용 프로그램 속도가 느려질 수 있습니다. 더 빠른 응용 프로그램을 원하거나 더 적은 메모리를 사용하는 응용 프로그램을 원할 때가 있습니다.

가능한 경우 C 코드를 사용해보십시오. 예를 들어 배열에 객체를 저장하기 만하면 특정 메소드에 의존하지 않는 한 NSMutableArray를 사용하지 마십시오. 그렇지 않으면 'id *'변수를 사용하고 malloc() 및 free()를 사용하십시오.

희망이 ... 조금 도움이 :)

+0

'release '를'autorelease'로 바꾸면 iOS 5와 6의 속도가 극적으로 증가합니다. – Cong

3

당신이 많은 번 이상 실행 될 수 루프가 있다면, 수동으로 경우에 NSAutoreleasePool을 관리 할 가치가있을 수도 있습니다. 많은 경우 자동으로 해제되는 객체 (재단 등이 자동으로 해제되는 객체를 생성한다는 사실을 기억하십시오)를 끝내고 스레드를 종료하거나 실행 루프로 돌아가기를 기다리면 메모리 문제가 발생할 수 있습니다. 신청. 여기서 성공을 보장 할 수있는 방법은 없으므로 조금 탐구해야 할 것입니다.

거대한 기억을 먹는 사람 중 한 명은 이미지와 그 모든 것들입니다. 행 수가 수백 개이고 각 셀에 이미지가 포함 된 UITableView이 있으면 메모리에 모든 셀을 유지하지 않을 수 있습니다. 파일 시스템에 해당 이미지의 캐시를 유지하고 필요에 따라 이미지를로드 할 수 있습니다. 디스크 I/O는 비교적 비쌉니다. 그러나 메모리 알림을 자세히보고 현명하게 읽는다면 성능에 거의 영향을 미치지 않을 것입니다.

앱의 메모리 사용량을 줄이려 할 때 기억해야 할 핵심 기술은 정적 분석기 (Cmd + Shift + A)와 Instruments, 특히 객체 할당 도구를 사용하는 것입니다.

내가 할 일은 가능한 한 인스턴스 변수를 피하는 것입니다. 그들은 코드가 소유자가 될 때까지 할당을 해제하지 않기 때문에 코드를 유지 관리하고 사용하는 것을 더 어렵게 만듭니다. 불필요한 인스턴스 변수를 피하거나 디스크에서 다시 만들 수있는 경우이를 빨리 해제하려고 시도하십시오.