iOS 에서 자주 사용 하 는 몇 가지 통신 메커니즘
4. 567914. 통신 을 개발 하 는 방식 은 모두 다섯 가지 가 있다.
1. Delegate-
2. Block-
3. Notification-
4. KVC-
5. KVO-
그렇다면 실제 개발 에 서 는 어떻게 선택해 야 할 까?우 리 는 그들 사이 에 존재 하 는 차이 점 과 비슷 한 점 을 깊이 이해 해 보 자.
1. delegate
개념: 대 리 는 개발 에서 가장 보편적 인 디자인 모델 로 대리자 에 의 해 대리 협 의 를 정의 한 다음 에 대리자 에 게 협 의 를 실현 하도록 위탁 하 는 것 으로 주로 두 대상 간 의 전송 값 상호작용 에 사용 된다.실제 개발 에서 의 사용 장면 은 보기 에 사용 되 고 사용 대상 과 의 상호작용 에 사용 되 는데 가장 현저 한 특징 은 바로 반환 값 이 있다 는 것 이다.
주의: 전송 값 조작 에 자주 사용 되 는데 delegate 와 알림 의 용법 은 같 습 니 다. 전 자 는 1 대 1 이 고 후 자 는 1 대 1 이 많 습 니 다.dealloc 에 서 는 nil 로 가 져 올 것 이 며, delegate 에서 속성 을 설정 할 때 assign 키워드 로 수식 하여 순환 참조 가 되 지 않도록 해 야 합 니 다.
delegate 의 효율 이 가장 높다
2. block
개념: iOS 4.0 이후 에 제 공 된 문법, block 의 사용 은 C 언어의 함수 로 이해 할 수 있 고 실행 시의 특성 과 표준 C 의 함수 가 있 습 니 다. 그러나 그 운행 은 컴 파일 러 와 실행 시 지원 이 필요 합 니 다. 매개 변수 로 전달 할 수 있 습 니 다. block 은 방법 에 의 미 를 부여 할 수 있 지만 함수 가 안 됩 니 다. block 문법 은 간결 하지만 이해 하기 쉽 지 않 습 니 다.block 방법 내 부 는 부분 변 수 를 방문 하여 대 리 를 더욱 치밀 하고 구조 화 할 수 있 습 니 다.delegate 에 해당 합 니 다. block 은 프 록 시 프로 토 콜 을 만 들 지 않 고 사용 이 간단 합 니 다. 이 는 폐쇄 성 (closure) 을 가지 고 문맥 상 태 를 쉽게 얻 을 수 있 습 니 다.
확장: block 은 왜 copy 로 수식 합 니까?block: 우 리 는 코드 블록 이 라 고 부 릅 니 다. 그 는 비슷 한 방법 입 니 다.모든 방법 은 호출 될 때 하 드 디스크 에서 메모리 까지 실행 한 다음 에 실 행 됩 니 다. 실행 이 끝나 면 사라 집 니 다. 그래서 방법의 메모 리 는 우리 가 관리 할 필요 가 없습니다. 즉, 방법 은 메모리 의 스 택 에 있 습 니 다.그래서 block 은 OC 의 클래스 대상 (쌓 기 구역) 과 달리 그 도 스 택 에 있 습 니 다.만약 에 우리 가 Block 을 대상 으로 하 는 속성 을 사용한다 면 우 리 는 키워드 copy 를 사용 하여 그 를 수식 할 것 입 니 다. 왜냐하면 그 는 스 택 에 있 기 때문에 우 리 는 그의 소멸 을 통제 할 수 없습니다. 우리 가 copy 로 수식 할 때 시스템 은 이 block 의 실현 을 더미 구역 으로 복사 합 니 다. 그러면 우리 가 대응 하 는 속성 은 이 block 의 소유권 을 가지 게 됩 니 다.블록 코드 블록 이 미리 사라 지지 않 을 것 을 보증 할 수 있 습 니 다.
주의:
1. block 을 사용 하기 전에 block 에 대해 빈 값 으로 판단 해 야 합 니 다. 판단 하지 않 으 면 빈 값 이 발생 하면 붕 괴 됩 니 다.
2. block 을 사용 하기 전에 block 은 빈 값 으로 처리 합 니 다. MRC 환경 에서 먼저 block 대상 을 release 해 야 합 니 다. block 을 클래스 대상 으로 하 는 구성원 변 수 는 block 을 사용 하면 순환 참조 가 발생 할 수 있 습 니 다. block 을 빈 값 으로 부여 하 는 것 은 순환 참조 의 중요 한 방법 입 니 다.
3. 사용자 가 self 또는 구성원 변 수 를 block 에 가입 하기 전에 self 를 로 변경 해 야 합 니 다.weak
4. 다 중 스 레 드 환경 에서 (block 중의 weakSelf 가 분 석 될 수 있 는 상황 에서) self 를 strong 지침 으로 바 꾸 어 특정한 관건 적 인 단계 로 실 행 될 때 self 대상 이 분 석 될 수 있 도록 해 야 합 니 다.
5. MRC 의 컴 파일 환경 에서 block 이 구성원 매개 변수 로 복사 하려 면 스 택 에 있 는 block 을 더미 에 복사 해 야 합 니 다.
의미: Block 은 iOS 4.0 + 와 Mac OS X 10.6 + 가 도입 한 C 언어 확장 으로 익명 함수 의 특성 을 구현 합 니 다.이 는 개발 자가 두 대상 사이 에서 임의의 문 구 를 데이터 로 전달 할 수 있 도록 합 니 다. 이것 은 흔히 다른 곳 에 정 의 된 함수 보다 직관 적 입 니 다.
3. NSnotification
개념: NSnotification 의 한 센터 대상 이 등록 하고 알림 을 보 내 며 사용 하 는 다른 대상 은 모두 알림 을 받 을 수 있 습 니 다.용도: 서버 측 에 데 이 터 를 요청 하거나 데 이 터 를 제출 하 는 장면 에 자주 사 용 됩 니 다. 서버 측 과 성공 적 으로 상호작용 을 한 후에 서버 측 이 돌아 온 데 이 터 를 처리 하거나 응답 메 시 지 를 보 내 는 등 주의 가 필요 합 니 다. 동기 화 된 메시지 알림 체제 입 니 다. Observer 가 메시지 처 를 정리 한 후에 만 메시지 발송 자가 계속 실 행 됩 니 다.따라서 통지 처리 하 는 곳 에서 시간 을 많이 소모 하 는 작업 을 하면 카드 에 문제 가 생 길 수 있다.
다 중 스 레 드 응용 에서 Notification 은 어느 스 레 드 에서 Post 를 사용 합 니까? 바로 그 스 레 드 에서 배포 되 고 같은 스 레 드 에서 observer 에 의 해 처 리 됩 니 다.일반적으로 저 희 는 Observer 대상 의 dealloc 방법 에서 removeObserver 를 제거 합 니 다. 이론 적 으로 observer 의 dealloc 와 메시지 발송 자의 post Notification 방법 이 서로 다른 스 레 드 에서 호출 되면 Crash 를 초래 할 수 있 습 니 다.
방송 데이터
4. KVC
개념: Key - value coding 은 문자열 식별 자 를 사용 하 는 비공 식 프로 토 콜 로 대상 속성 을 간접 적 으로 방문 하 는 메커니즘 입 니 다. getter 와 setter 방법 을 직접 호출 하 는 것 이 아니 라 set value for key 를 통 해 인 스 턴 스 변 수 를 간접 적 으로 방문 하 는 것 입 니 다.
용도: 액세스 할 클래스 의 속성, 동적 접근 및 개인 변 수 를 동적 으로 방문 합 니 다.
주의: 1 대 1 도 가능 하고 1 대 1 도 가능 합 니 다.의미: 간접 방문 대상 의 속성 을 제공 합 니 다.
5. KVO
개념: KVO, 피 관찰자 가 관찰 자 를 추가 하고 피 관찰자 가 KVC 키 인 코딩 을 사용 하여 인 스 턴 스 변 수 를 수식 하 며 피 관찰자 가 변화 할 때 관찰 자 는 피 관찰자 가 변 한 사건 을 탐지 하여 해당 하 는 것 을 할 수 있다.
주의:
1. addObserver 이후 감청 이 필요 없 을 때 즉시 remove 합 니 다. 그렇지 않 으 면 감청 대상 에 의 해 방출 된 후 감청 기 를 터치 하면 crash 가 발생 합 니 다.
2. addObserver 방법 은 removeObserver 방법 과 일일이 대응 해 야 합 니 다.도청 을 반복 하지 말고, 추가 하지 않 은 감청 도 제거 하지 마 세 요.
용도: 지정 한 대상 의 특정한 속성 을 관찰 하고 속성 이 변화 할 때 알림 을 합 니 다.
의미: 다른 대상 의 속성 이 수정 되 었 을 때 현재 대상 에 게 알 릴 수 있 는 메커니즘 을 제공 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.