비디오: Quick Look: Milanote for iOS 2024
Objective-C 블록은 전통적인 C 함수와 비슷하지만 블록은 작고 독립적 인 코드 단위입니다. iOS 앱 그것들은 메소드와 함수의 인자로 전달 될 수 있고, 그런 다음에 어떤 일을 할 필요가있을 때 사용됩니다. (많은 프로그래밍 주제와 마찬가지로 블록 객체를 사용할 때 블록 객체를 이해하는 것이 더 쉽습니다.)
iOS 4 이상에서는 시스템 프레임 워크의 여러 메소드와 함수가 다음과 같은 블록을 매개 변수로 사용하기 시작합니다. <
완료 처리기-
알림 처리기
-
오류 처리기
-
열거 형
-
정렬
-
여기에서는 블록 기반 메서드를 사용하여 자동차에 애니메이션을 적용하지만 블록 객체에는 특히 Grand Central Dispatch와 동시 처리를위한 두 가지 권장 기술인 NSOperationQueue 클래스에서 사용되는 여러 가지 용도가 있습니다. 동시 처리를 확인하십시오.
블록 변수를 선언하고이를 메소드의 인수로 전달하면 어떤 일이 발생 하는지를 쉽게 파악할 수 있습니다. 그러나 선언 구문은 별표 포인터 (*) 대신 캐럿 (^)을 사용한다는 점을 제외하면 함수 포인터의 표준 구문과 비슷합니다.
+ (void) animateWithDuration: (NSTimeInterval) duration 애니메이션을 볼 수 있습니다: (void (^) (void)) 애니메이션 완성: (void (^) (BOOL finished)) 완료;
Apple은 이제 블록을 기본 디자인 패턴으로 상속 및 위임과 함께 처리합니다. 따라서 블록이 점점 더 많이 사용되고 있음을 알면 놀랄 필요가 없습니다. 그럼에도 불구하고, 다소 진보 된 코드이기 때문에 코드는 심도있게 조사되므로 정말 이상한 구문에도 불구하고 블록에 익숙해집니다.void (^) (void)) 애니메이션
완료는 반환 값이없는 블록으로 정의됩니다.
시작하려면, 이것은 매개 변수가없고 반환 값이없는 블록으로 애니메이션을 정의하는 구문입니다. 값은 단일 부울 인수 매개 변수를 취합니다.
(void (^) (BOOL finished)) 완료
블록을 인라인으로 만들면 캐럿 (^) 연산자를 사용하여 블록의 시작을 나타냅니다. 그런 다음 일반 중괄호로 묶인 코드를 따르십시오.그게
애니메이션에서 일어난 일입니다. ^ {self. 차.
완료: ^ (BOOL finished) {[self rotate];}
이 예에서는 블록을 인라인으로 사용하지만 다른 로컬 변수와 마찬가지로 선언 할 수도 있습니다. 코드를 굵은 체로하여 testDrive 메소드에 추가하십시오.
- (IBAction) testDrive: (id) 발신자 {CGPoint center = CGPointMake (자동차 중심 x, 자기 관찰 프레임의 원점 y + 차 프레임의 크기. 높이 / 2);
void
(^ animation) () =
^ ()
{
self. 차. 센터 = 센터; }; void (^ 완료) (BOOL) = ^ (BOOL 완료) { [자동 회전]; }; [UIView animateWithDuration: 3 애니메이션: 애니메이션 완료: 완료]; } 블록을 선언 할 때 캐럿 (^) 연산자를 사용하여 코드가 일반 중괄호로 묶인 블록의 시작을 나타내고 세미콜론은 블록 표현식의 끝을 나타냅니다. Listing 10-2의 선언은 다음 animateWithDuration: animation: completion: 메소드 선언에서 볼 수있는 것과 거의 동일합니다. 단, 식별자가 약간 옮겨 졌음을 제외하고는. + (void) animateWithDuration: (NSTimeInterval) duration 애니메이션: (void (^) (void)) 애니메이션 완성: ( void (^) (BOOL 완료)
) 완료;
여기서는 ^ 연산자를 사용하여 두 개의 블록 변수를 선언합니다. 하나는 반환 값이없는 애니메이션 이름이고 하나는 반환 값이없고 BOOL을 단일 인수로 사용하는 완료 이름입니다.
void (^ animation) () void (^ 완료) (BOOL) 이것은 다른 변수 선언 (int i = 1과 같은)과 같습니다. ^ 연산자를 사용하여 블록 변수에 할당 된 블록 리터럴 의 시작을 나타냅니다. 블록 리터럴에는 블록의 본문 (코드)과 함께 인수 이름 (완료)이 포함되며 세미콜론으로 끝납니다.
void
(^ animation) () =
^ ()
{본인. 차. center = center;}; void (^ 완료) (BOOL) =
^ (BOOL 완료) {[자기 회전];}; 블록을 놓으면 코드를 단순화하기 위해 블록을 사용하는 모든 종류의 기회를 발견하게됩니다.