2014-02-28 2 views
0

이것은 다소 기본적인 질문이지만 약간의 설명이 필요합니다.코어 데이터 및 마법 레코드 저장

나는이 코드를 가지고 있습니다.

//line of code #1 

[localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) { 

    //line of code #2 

}]; 

코드 2 행이 완성 블록입니까? 코드 # 1 줄에 저장하기 전에 항목을 변경해야합니까? ^(…) { … } 또는 ^{ … }의 형태와

감사

+1

예, 다시 한번 :) – damirstuhec

답변

1

아무것도는 block이다. 본질적으로 블록은 직접 실행되지 않는 코드 덩어리를 이식 ​​할 수 있습니다. 블록을 변수에 저장 한 다음 나중 시점에 실행할 수 있습니다.

typedef void (^my_block_t)(); 
my_block_t myBlock = ^{ 
    NSLog(@"I'm in a block"); 
}; 

다음은 로그 문을 인쇄하는 블록입니다. 블록은 변수 myBlock에 저장됩니다. 참고 :이 시점에서 NSLog은 아무 것도 출력하지 않습니다.

나중에 어느 시점에서 myBlock을 실행할 수 있습니다. 코드의이 시점에서

myBlock(); 

는 블록을 실행하고 그것의 문 밖으로 NSLog 인쇄됩니다.

예를 들어, 코드 # 2 행의 실행은 저장이 완료 될 때까지 지연됩니다.

논리적으로 동일한 같이 작동한다 :

단계 1) 코드 # 라인 1
2 단계를 실행)
단계 3) 코드 번호의 라인을 실행 저장 실행 2

코드 # 2 줄의 내용은 저장이 완료된 후에 발생하기 때문에 모델 변경 사항은 그 시점에 저장되지 않습니다.