수색…


통사론

  • 변수로 :

    returnType (^ blockName) (parameterTypes) = ^ returnType (parameters) {...};

  • 부동산으로서 :

    @property (비 원자, 사본) returnType (^ blockName) (parameterTypes);

  • 메서드 매개 변수로 :

    - (void) methodWithBlock : (returnType (^) (parameterTypes)) blockName;

  • typedef로서 :

    typedef returnType (^ TypeName) (parameterTypes);

    TypeName blockName = ^ returnType (매개 변수) {...};

UIView 애니메이션

[UIView animateWithDuration:1.0
    animations:^{
        someView.alpha = 0;
        otherView.alpha = 1;
    }
    completion:^(BOOL finished) {
    [someView removeFromSuperview];
}];

캐럿 "^"문자는 블록을 정의합니다. 예를 들어, ^{ … } 은 블록입니다. 보다 구체적으로, "void"를 반환하고 인수를 허용하지 않는 블록입니다. 그것은 "- (void) something;"과 같은 방법과 동일하지만 코드 블록과 관련된 고유 한 이름이 없습니다.

인수를 받아 들일 수있는 블록을 정의하는 것은 매우 유사합니다. 블록에 인수를 제공하려면 다음과 같이 블록을 정의하십시오. ^ (BOOL someArg, NSString someStr) {...} *. 블록을 지원하는 API 호출을 사용하면 위의 예에서와 같이 특히 애니메이션 블록 또는 NSURLConnection 블록의 경우 이와 비슷한 블록을 작성하게됩니다.

사용자 정의 메소드의 사용자 정의 완료 블록

1 - 사용자 정의 블록 정의

typedef void(^myCustomCompletion)(BOOL);

2 사용자 정의 완료 블록을 매개 변수로 사용하는 사용자 정의 메소드를 작성하십시오.

-(void) customMethodName:(myCustomCompletion) compblock{
    //do stuff
    // check if completion block exist; if we do not check it will throw an exception
    if(complblock)
       compblock(YES);
  }

3- 메서드에서 블록을 사용하는 방법

[self customMethodName:^(BOOL finished) {
if(finished){
    NSLog(@"success");
}
}];

캡처 된 변수 수정

블록은 동일한 어휘 범위에 나타난 변수를 캡처합니다. 일반적으로 이러한 변수는 "const"값으로 캡처됩니다.

int val = 10;
void (^blk)(void) = ^{
    val = 20; // Error! val is a constant value and cannot be modified!
};

변수를 수정하려면 __block 저장소 유형 수정자를 사용해야합니다.

__block int val = 10;
void (^blk)(void) = ^{
    val = 20; // Correct! val now can be modified as an ordinary variable.
};


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow