일일의 iOS 앱 개발 시리즈

이 논문은 아이폰 OS 개발에 대한 이해에 대해 설명하고 철수 시작, 지식의 일부를 통합 할 것이다에서 우리는 지식의 체인을 형성, 그 응용 프로그램을 희망, 현재의 시점에 관한 지식이 runloop, 실행, 파일 저장, 인터페이스 레이아웃, 오프라인 메모리 관리, 응답 체인 멀티 스레딩을 누른다. 부적절하지만 더 간단하고 분명 대부분, 나는 자신의 이해를 작성하려고, 전문 코드가 링크를 붙여 넣으려고, 저를 수정하시기 바랍니다.

### 일, 일을 시작하기 위해 아이콘을 클릭 주 스레드에서 설정, runloop를 실행하기 시작했다

 A 앱은 왜 시작은 살아있다 저기에 메인 쓰레드가 살아있다이며, 주류 Chengkai 치 runloop 때문에 응답 사용자 작업, 그것은이다. runloop이 약의 죽음으로 이해 될 수있다 소개 할 - 동안 프로그램을 중지하기 전에 프로세스가 사망 할 때까지 자신의 작업과 반복해서 실행되고 루프. 이 메시지에 대한 사용자의 운영 및 처리 시스템을 듣고, 타이머 이벤트 처리를 담당 유사한 소규모의 청지기의 역할을 가정합니다.

이벤트가 수신 될 때 이해가 이벤트를 처리 할 필요가없는 경우,이 상태가 사실 runloop 사용자 모드와 커널 모드에 있다는 것을 더 깊이있는 약간은 다음 커널 모드로 전환, 최대 절전 모드가 시작되면, 사용자 모드로 최대 절전 모드의 끝을 전환 . 바쁜 대기, "자유"대기 부담의 형성이 CPU를 감소하면서 이는 정상 CPU 사이클을 방지 할 수 있습니다.

다음 runloop 특정 처리는, 그 주목된다 :
. 1 타이머 이벤트 타이머 나타내는
2 사용자와 PerformSelectors 대신 Source0 터치 이벤트
. 3,와 Source1의 화면 나타내는 잠금 / 이벤트 시스템 진탕

! [runloop (https://upload-images.jianshu.io/upload_images/3288430-7ca2952ad7059140.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

위대하신 하나님 YYKit 블로그 주소를 첨부 : [https://blog.ibireme.com/2015/05/18/runloop/] (https://blog.ibireme.com/2015/05/18/runloop/)


### 2 주 스레드는 메인 스레드 인터페이스 새로 고침에 데이터를 다시 얻을, 로컬 저장소를 쿼리 UI, 공개 정보의 하위 스레드를 그리기 시작합니다

이 때, 측면은 로그인 정보를 조회 할 로컬 스토리지가없는 상태, 인터페이스 환영 페이지를 그리거나 페이지를 시작하기 시작했다. 참고는 메인 스레드가 UI를 그릴 것을, 그래서 이러한 장점은 사용자의 대기 시간을 줄이기 위해 메인 스레드를 차단하지, 로그인 정보가 자식 스레드에 쿼리합니다.

멀티 스레딩 기술에 대해서는, 이동, 우리의 두뇌는 도보로 관련 작업을 처리 할 때하는 동안 음악을들을 수 있습니다뿐만 아니라, 운영과 관련된 노래를 다루는 것처럼, 멀티 태스킹으로 이해 될 수있다.

 모든 응용 프로그램은 자신의 작은 가족을 가지고 아이폰 OS, 우리는 샌드 박스 메커니즘을했다. 모든 초기의 작은 홈 스타일은 동일하지만, 내부 장식을 자신의 디렉토리 구조의 다양성을 증가시킬 수있다.

! [샌드 박스 디렉토리 (https://upload-images.jianshu.io/upload_images/3288430-5fec4ff437cd3fe7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

각각 별도의 작은 집입니다 주목해야한다, 게스트 액세스 할 수없는 이웃을 방문하거나 다른 응용 프로그램에서 데이터를 수정할 수는 없지만 할 수 있습니다, 방법을 공유함으로써 공증 시스템의 데이터 교환을위한. 시스템 레벨 자원의 일부는 공기의 공통 자원으로, 같은 앨범, 카메라, 직사광선입니다 같은 다른 연락처로, 일반적이다.

특정 암호화 메커니즘에 샌드 박스 원리, 우리는이 문서 [기사] (https://blog.csdn.net/youshaoduo/article/details/66478551), 아, 내가 이해하지 못했다 볼 수 있습니다.

여러 가지 방법으로 로컬 데이터의 일반적인 작동에 아이폰 OS는 분류 될 수있는 데이터의 종류에 따라, 데이터베이스를 사용하여 같은 대량 주소록 데이터와 같은 데이터의 중복, 데이터베이스 SQLite는 아이폰 OS, 파일 형식의 데이터를 직접 선호에 의해 사용되는 정보의 일부 조각입니다 그것을 읽을 파일 쓰기 /.

그러면 인터페이스 하향 연장 우측 좌표의 원점으로 좌측 상단 그릴 정상 렌더링 UI 컨트롤, 일반적으로 4 개 원소의 좌표를 결정하기 위해 필요한, 즉, 폭, 높이, Y는 (길이 방향)의 좌표 (가로 방향)을 X 좌표 . 예를 들어, 제어 (A)의 폭이 화면의 폭과 동일하고, 설정된 기준 조건에서의 좌표를 획득하기 위해 상기 기준 원리를 이용하여, 제어 장치를 상호 의존적 제약은 원리되어 사용 제어 B의 폭이 제어 (A)의 폭과 동일, 우리는 B의 제어를 계산할 수 스크린 폭의 폭. 이 방법을 전반적으로는, 성능 등의 값을 직접 좌표가 아니라 화면 적응에 많은 장점을 차지할뿐만 아니라, 매우 자동으로 수동 계산 단계를 줄이고, 계산 컨트롤의 높이 완화, 그것은 현재 주류 프로그램.

! [좌표 (https://upload-images.jianshu.io/upload_images/3288430-25347d04c8889436.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


### (3), 사용자 입력을 수신하고, 클릭 및 다른 슬라이드 조작 처리 시작

이러한 사용자의 조작이 runloop는 응답 체인의 응답을 제어하고자하는 공정, 대응하는 방법을 실행하고, 촬상된다. 컨트롤의 범위 내에서 클릭 된 좌표, 그것은 현재 컨트롤을 반환하고 작은 자식 컨트롤을 찾을 때까지 컨트롤의 자식 컨트롤을 통과 계속하는 경우, 모든 자식 컨트롤을 통해 하강, 시작 화면에서,이다 소위 응답 체인.

등 클릭 방법, 제스처와 같은 해당 설정 방법을,이 경우 제어, 다음 방법에 따라, 부모로 이동하지 않는 규칙을 찾을 수 연기자 방법을 현재 클래스의 방법 목록에서이 먼저 모습입니다 찾을 수 있습니다 메시지 전달 과정 입력, 더 기본 클래스가없는 경우, 다음, 기본 클래스까지, 부모 부모 클래스에 가지 않았다.

이 수단이 메시지 전달 과정, 시스템 개발자, 검사의 I 완성 층,이 방법의 오브젝트를 응답, 그리고 마지막으로 당신에게 기회를주고, 또는 원래의 방법을 대체하기 위해 앞으로 방법을 넣어, 또는 나에게 제공되지 않습니다 이 방법에 응답하여 객체. 메시지가 프로세스를 완료하기 위해 전달되는 경우 마지막으로, 그것은 다음을 축소, 처리 할 수 ​​있습니다. [여기]에서 전문적인 메시지 전달 분석보기 (https://www.jianshu.com/p/9263720cbd91). 그리고 깊은 분석 샤오 유 위대한 하나님 [기사] (http://yulingtianxia.com/blog/2016/06/15/Objective-C-Message-Sending-and-Forwarding/)의 편집을 볼 수 있습니다.

### 4, 데이터가 반환 될 때까지 메인 쓰레드 반환 화면을 새로 고치려면 데이터를 얻을 네트워크 요청을 시작합니다

데이터는 일반적으로 마모 매개 변수, 필요한 포스트는 일반적으로 사용되는 경우 배경에 전달 된 매개 변수를 추출하는 데 사용되지되고, 네트워크 요청은 일반적으로 GET 두 종류의 사후 요청을 실시. 그 이유는 전달 된 매개 변수가 다시 링크 요청에 바느질 요구되는 GET이며, 데이터 보안을 보장 할 수 없으며, 길이 매개 변수는 제한되며 많은 정보를 제공 할 수 없습니다.

HTTP 및 HTTPS에 대해 우리는 [도움말]을 볼 수 있습니다 (https://juejin.im/post/5dd50eba6fb9a05a6313ebba).

### (5), 3,4- 반복 긴장 간헐적 객체 자동 미사용 가능한 메모리를 청소

아이폰 OS OC retainCount 오브젝트가 생성된다 (참조 횟수) 특성을 가지고 각 오브젝트의 참조 카운트는 1이고, 경우에 오브젝트 레퍼런스 카운트에 1을 더한, 더 이상 대기 시간에 의해 유지 다른 개체 객체가 더 이상 마이너스 1로 사용되는 경우, 기준 카운트가 0으로가는 경우 영하 1, 다음 객체는 즉시 시스템에서 회수되지 않는다.

그 후, 시스템은 풀 관련 인터페이스의 자동 해제를 제공하는 원리는 풀 타겟에 첨가 가까이 각 runloop, 시스템은 풀 참조 횟수 빼기 1이 모든 오브젝트하게, 마이너스 1을 참조하는 경우 카운트는 오브젝트를 즉시 회수 0이다. 이러한 상황이 참조 카운트가 존재하지 않는 것을 주 목적은 시스템 횟수가 보낸 메시지의 수신에있는 경우 시스템 메시지가 도착하면, 다음 개체가 즉시 파괴 제로되기 전에 연못을 인용, 부정적이된다 오브젝트가 존재하지 않는 경우 빈 개체에 아무것도하지 않는 것은 아무 반응없이 영향이없는 상태, 즉 메모리 주소가 비어 있습니다.

켜져 runloop 때 나머지는 뭔가 오토 릴리즈 풀을 분리 한 다음 비어있는 새 풀을 다시 만들 수 있습니다 전에 runloop이 때 자동으로 runloop 해제 될 때 내부 runloop 풀 자동 오토 릴리즈 풀을 생성합니다, 자동 자료를 가지고 웨이크 업 무릎을 다시 시작, 타이머, 소스 및 기타 새로운 이벤트가 자동으로 새 풀에 공개 될 때 runloop 출구가 해제 될 때.

그는 메모리 관련, 치료 관련 메모리 누수가 자연스럽게, 내가 특정 [(에) 메모리 누수 분석 아이폰 OS 개발 시리즈 (참조, 대부분의 메모리 누수의 전 상황을 요약했다 https://www.jianshu.com/ [메모리 누수 분석 iOS의 개발 시리즈 (중)] P / 1b06751130c8) 및 (https://www.jianshu.com/p/d0008f28053f).

### 6 점심 시간, 배경에, 프로세스 중단, runloop 수면이있는 한,

사용자가 홈 키를 누르면, 일반적으로 약 10 초 응용 프로그램은이 상태가 응용 프로그램에는 활동하지 중단의 상태를 일시 중지로 들어갑니다. 이 응용 프로그램은 백그라운드에서 실행 된 특별 같은 음악 재생, 사용 장소의 VoIP 서비스 (포인트 오디오 및 비디오 점)를 사용하여 기반 서비스로, 시스템에 적용 할 수 있습니다. 일부 기업은 자동 응용 프로그램이 활성 상태로 유지하기 위해 음악을 재생하는 데 사용하는 그래서,이 방법이 거부 선반으로 이어질 것이라는 점을 주목해야.

### 7, 사용자가 응용 프로그램을 열 생각 나게하는 푸시을받은 나머지의 끝, 작업을 계속, runloop 패러다임 변화,

푸시 원칙은 애플 도킹 백그라운드 서버, 응용 프로그램 자신의 장치가 개시 후 배경에 토큰을 각각 업로드, 배경으로, 메시지를 보낼 필요 푸시는 해당 장치 토큰을 찾을 수, 사과 규정 된 형식 메시지로 오프라인 아이폰 OS입니다 다음 애플 서버 추진에 대한 책임있는 APN과와 토큰을 보냈습니다 애플 서버에서 장치를 찾을, 푸시 메시지는 시스템의 수준이를 표시합니다. 배경 JAVA 코드 구문 분석을 참조하십시오 [여기]를 포함하여 프로세스의 전문 풀 세트 (https://www.cnblogs.com/taintain1984/p/3716642.html).

푸시 메커니즘 pushkit라는 곳도 있습니다, 보통있는 APN 사이 pushkit 차이가 통지를-팝업되지 않지만 직접 응용 프로그램을 깨워, 콜백을 입력한다는 것입니다, 즉, 사용자가 케이스의 응용 프로그램 시작에 클릭 할 수 없습니다, 당신은 대부분의에,하지만 때문에 응용 프로그램에 시작이 푸시의 운용성 때문에, 사용자의 지식 애플의 감사는 더 엄격한, 우리는 그것을 자신을 작성한 코드를 실행합니다.

### 8,

직장에서 휴식을, 과정, 정류장 메인 스레드를 죽여.

사실, 갈 뭔가 더 추가하고 싶지만, 지금 좋은 아이디어, 의견은 환영하지 않습니다있다.

비트에 의해 내 진행 비트를 기록하는 아래의 [내 둥지 (https://zmfflying.github.io/) 게스트 아에 오신 것을 환영합니다, 모든 유일한 방법은 앞으로 역경의 근거, 상호 격려의 왕.

추천

출처www.cnblogs.com/zmfflying/p/12028321.html