전력 소비 및 탐지 아이폰 OS의 최적화

우선, 소비 전력 검출

1 '설정'으로 이동 전화 -> "배터리"는 모바일 애플리케이션의 전력 소비를 시각적으로 볼 수있다.

6006739 - db9d6696251eb730.png
의 image.png

6006739 - acb4774b5582349c.png
의 image.png

2, 다음 6 + 명령, Xcode 프로젝트를 연 다음 (진짜 기계를해야합니다) 프로젝트를 실행하는 실제 기계를 사용하여 전화를 연결, 에너지 충격을 클릭

6006739-16ea679f8c0c347a.png
의 image.png
  • 파란색 표시 - 합리적인
  • 노란색 - 나타내는 더 많은 전력
  • 빨강 - 약간을 나타냅니다
    순간 전력 소비의 경우이다 활용 열 차트
    차트 평균 열이의 평균 소비 전력을 나타냅니다
    차트 에너지 영향 코트 (파란색) 오버 헤드 프로젝트의 코드를 실행하는 데 필요한 전력 나타냅니다 (적색) 이러한 전화 등의 CPU 연상 무선 모듈 (블루투스 및 무선 랜) 및 기타 시스템 자원을 포함한 표현 비용.
    전력 소비에 영향을 미치는 다섯 개 요소는, 전력 소비는 흰색, 회색, 더 전력 소비를 나타내는을 가지지
  • CPU : CPU 사용은 배터리 전력 소비의 20 % 빠르고, 효율적이고 실제 CPU 수, 사물이 때 사용자 입력을 흐리게 나타나는 어떻게 신속하게 대응할 것 초과합니다.
  • 네트워크 : 네트워크 활동이 필요 주기적으로 전원 라디오 모듈 배치가 오버 헤드를 줄이기 위해 네트워크를 요청할 수있다 긴 시간과 끝
  • 위치 : 정밀도 및 높은 주파수의 위치가 오버 헤드 증가 주문형해야합니다.
  • GPU : 그래픽 처리 장치 (그래픽 프로세서), 임의의 상호 작용은 GPU의 차이를 야기하고, 배터리 수명을 줄일 수 있습니다.
  • 배경 : 이러한 동작이 완료되면 배경 상태가 여전히 전원 APP 소모 APP 백그라운드 상태 시스템 APP 즉시 감소 동작을 입력하고, 통지하면, 또한, 백그라운드 동작을 수행하고, 시스템 동작이 효율적으로 수행되도록 지연 API를 사용하는 데 필요한 .

에너지 로그의 악기를 사용하여 3,

전화 설정을 열고 "개발자"를 클릭 : 한 단계


6006739-14f17d20b9119bc3.png
의 image.png

단계 : 로깅을 클릭


6006739 - ba568cf1e09270b3.png
의 image.png

단계 세 : 에너지를 선택하고 startRecording을 클릭
6006739-9e8065b788bec2e4.png
의 image.png

네 단계 : 실행 APP 테스트 필요 3~5분을 실행, stopRecording를 클릭하여 전화 설정을 입력합니다 (확인을 확인 전화 자체가 배터리를 소모 전화입니다)


6006739-5de90f0c92dbc58e.png
의 image.png

5 단계 : 사용 엑스 코드 및 전화 엑스 코드에 연결하고, 에너지 로그에 악기를 열고 장치에서 가져 오기 도구 모음 기록 된 데이터를 클릭합니다
6006739-93f837f65ec8398f.png
의 image.png

제 6 단계 : 로그 세포 손실을 얻기
  • 에너지 레벨 값 사용 (0--20)는 큰 값은 소비 전력을 나타냅니다
  • CPU의 CPU 활동은 다양한 활동을 나타냅니다


    6006739 - b7636ddabfd8b620.png
    의 image.png

소비 전력 최적화

첫째, 코드 레벨

1 NSDateFormatter 높은 오버 헤드의 사용은 합리적인 NSCalendar 개체

  • 성능 테스트는, NSDateormatter 성능 병목 현상이 NSDateFormatter 만들 의미의 단일 경우는 NSString 형식을 변환 할 수있는 NSData 형식으로 인해, 그래서하지 않는 것을 보여 방법이다 추천했다. 캐시로 가장 일반적으로 사용되는 날짜 형식.
static NSDateFormatter *cachedDateFormatter = nil;

+ (NSDateFormatter *)cachedDateFormatter {

if (!dateFormatter) {

dateFormatter = [[NSDateFormatter alloc] init];


[dateFormatter setDateFormat: @“YYYY-MM-dd HH:mm:ss”];

}

return dateFormatter;

}

2,하지 자주 새로 고침을 페이지를 수행 한 줄은 reloadData를 사용하지 않는 시도, 새로 고침에게 오직 최고의 세포주를 새로 고칠 수 있습니다.

3 정확한 컬렉션을 선택

  • NSArray를 신속하게 찾기 위해 인덱스를 사용 (삽입과 삭제 매우 느리게)
  • 사전, 신속하게 찾을 수있는 키를 사용하여
  • NSSets 신속 키, 삽입 / 곧 삭제 찾기, 순서가있다

(4)이 적은 등심을 얻기 위해 계산, 또는 view.maskToBounds의 layer.clipToBounds은 훌륭한 자원 오버 헤드를 할 것인지, 당신은 필렛을 사용해야합니다, 둥근 그림 자체를 확인하는 것이 좋습니다

5, 게으른 로딩은 모든 하위 뷰를 한 시간을 만들 수 있지만 만들 필요가 없습니다

6 재사용

  • 완전한 실명을 만들 재사용 수집에 그를 넣어 필요할 때 당신은 jQuery과 및 UICollectionView는 모든 시간을 서브 뷰를 생성하지 않는 모방 할 수 있지만.

(7) 화상 처리

  • 동일한 크기의 이미지 뷰의 이미지는 불필요한 동작을 방지
  • 당신은 이미지의 전체 쌍을 사용하는 응용 프로그램의 볼륨을 증가하지만, CPU를 저장할 수 있습니다
  • 조정 가능한 크기의 이미지, 불필요한 공간을 절약
  • 의 CALayer,있는 CoreGraphics, 심지어 OpenGL은 CPU를 소비 ,, 그립니다

8, 캐시, 캐시, 캐시 (캐시 모든 필수)

  • 해당 캐시 서버의 결과 (사진)
  • 캐시 복잡한 계산 결과 (jQuery과 행 높이)

도 9에서, 추가 동작이 발생할 투명 투명 또는 반투명의 사용을 최소화

(10)는, 메모리 사용 ARC 음식을 줄이기 위해, 할당 해제는 다시 작성해야하고, 속성은 전무로 설정

11, 거대한 XIB을 피하기 위해, 스토리 보드, 순수 코드 개발을 사용하려고

CPU 수준

1, 타이머 간격은 수요를 충족하기에 너무 짧은 안된다

2. 너무 많이, 적당한 양의 스레드 주 스레드를 차단하지 않습니다

3, 최적화 알고리즘은 사이클의 수를 줄이기 위해

4 위치 및 블루투스 액세스 요구 또는 측위 후 가까운 위치의 주파수를 감소시키기

HTTPS : //www.jianshu.com/p/10bd19df2b14 재현

추천

출처blog.csdn.net/weixin_33851604/article/details/91159888