iOS Block 이 오 해 를 풀 고 있 습 니 다.
(1)Block 은 OC 의 데이터 형식 으로 iOS 개발 에 널리 사용 된다.
(2)^Block 특유 의 표식
(3)Block 의 구현 코드 는{}사이 에 포함 되 어 있 습 니 다.
(4)대부분의 경우 inline 함 수 를 내 연 하 는 방식 으로 정의 되 고 사용 된다.
(5)Block 은 C 언어의 함수 포인터 와 비슷 하지만 사용 하기에 더욱 유연 하 다.
이 그림 은 제 가 2015 년 에 발 견 된 신대륙 입 니 다.그때 도 block 이 특수 한 데이터 형식 이 고 특수 한 대상 이라는 것 을 알 았 습 니 다(NSObject 와 다 릅 니 다).실행 할 때 반드시 if 로 판단 해 야 한다.나 는 Block 변수 에 nil 을 할당 하 였 는데,모두 crach 였 다.아래 값 을 보 세 요.닐 이 아니 라 NULL 입 니 다.
1.특별한 대상 유형
아래 코드 의 정확성 은 block 도 대상 유형 임 을 설명 합 니 다.
{
// block
NSArray* arr = @[^(NSString* name){
NSLog(@" ");
return name;
}];
// , block
NSString* (^b)() = arr.firstObject;
NSLog(@"%@", b(@"CoderHG"));
}
상기 코드 의 합 법성 은 Block 이 특수 한 대상 유형 임 을 증명 할 수 있 습 니 다.그러면 앞으로 면접 을 볼 때 강요 하 는 척 하면 서 OC 에서 세 가지 서로 다른 대상 유형 이 있 는데 그것 이 바로 NSObject,NSProxy 와 Block 이다.2.판 공의 중요성
위 에서 도 block 을 실행 하기 전에 공 처 리 를 해 야 한 다 는 것 은 이유 가 있다.
한 nil 대상 의 block 속성 이 실 행 될 때 도 crach 입 니 다.이것 은 내 가 지금까지 block 에 대한 이 해 를 전복 시 켰 다.
하지만,어쨌든 crach 는 실행 하기 전에 if 한 번 만 틀 리 지 않 습 니 다.그럼 구체 적 으로 왜 crash 일 까요?다음 그림 을 보십시오.
위의 그림 은 왜 반 짝 이 는 지 뿐만 아니 라 왜 반 짝 이 는 address=0x 10 도 소개 했다.면접 필수,면접 필수,면접 필수.
3.나의 면접 경과(17 년 12 월)
미 단 면접 2 차 때 질문 을 받 았 습 니 다.2 차 는 한 시간 정도 걸 립 니 다.면접 관 이 면접 을 마 치 려 고 할 때 마지막 에 이런 질문 이 왔 습 니 다.대충 경 과 는 이 렇 습 니 다.
1.할당 값 이 비어 있 는 block 을 호출 하면 어떤 상황 이 발생 합 니까?
이 문 제 를 보고 나 는 매우 기 뻤 다.내 가 대답 한 점 은 바로 crash,block 은 특수 한 대상 이 고 할당 값 은 NULL 과 nil 이 모두 반 짝 거 린 다 는 것 이다.
나 는 다음 문제 때문에 즐거움 과 슬픔 이라는 성 어 를 잊 어 버 렸 다.
2.반 짝 이 는 그 주소 값(address)은 얼마 입 니까?
얼굴 이 가 려 져 있 는데 어떻게 이 문 제 를 물 어 볼 수 있 습 니까?.............................................맞 히 는 수 밖 에 없어 요.평소에 관심 이 없 으 니까 요.0x0 인 것 같 습 니 다.직접 알려 준 면접 관 은 맞 혔 습 니 다.그 가 직접 나 에 게 이 가치 가 아니 라 고 말 한 후에 그 는 다시 다른 문 제 를 던 질 줄 은 생각 하지 못 했다.
3.이 값 은 0x 10 인 데 왜 그런 지 아 세 요?
나 는 두 번 째 질문 도 모 르 고 세 번 째 질문 은 모 를 거 야...
나중에 야 위의 그 그림 의 내용 을 총 결 해 냈 다.
고마워~
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.