objective-c Block

1210 단어
블락은 비교적 특수한 애플이 공식적으로 추천하는 데이터 유형으로 응용 장면이 광범위하다
  • 애니메이션
  • 다중 스레드
  • 집합 반복
  • 네트워크 요청 리셋 작용: 특정한 코드를 저장하는 데 사용되며, 적절한 시기에 호출할 수 있으며, 기능은 함수와 유사하다
  • 서식
          (^block   )(    ) = ^{
    
    };
    
    //  Block  ,
    type (^BlockName) (type, type);
    BlockName = ^(type name1, type name2){
    
    };
    
    //  
    BlockName(name1,name2);
    

    typedef를 빌려 블록에 변수 이름을 정의합니다.
    장면 적용
  • 코드의 앞과 뒤가 같을 때 블록
  • 을 사용할 수 있습니다
    void fun(^BlockName())
    {
        NSLog(@"1");
    
        BLockName();
    
        NSLog(@"3");
    }
    
    void fun1()
    {
        fun(^{NSLog(@"3");});
    }
    
      :1
         2
         3
    

    참고:
  • 블록은 외부 변수에 액세스할 수 있음
  • 블록은 외부와 정의된 변수를 정의할 수 있으며, 외부와 같은 이름의 변수가 있으면 블록에 접근한 변수
  • 기본적으로 블록에서 외부 변수의 값을 수정할 수 없음
  • 블록의 변수와 외부의 변수가 같은 변수가 아니기 때문
  • 블록이 외부의 변수에 접근하면 블록은 외부의 변수를 메모리에 복사한다
  • Block 다음은 주소 전달이기 때문에 Block에서 외부 값을 수정할 수 있습니다
  • 기본적으로 블록은 창고에 저장됩니다. 블록이 복사 작업을 하면 블록은 더미로 이동합니다
  • 블록이 창고에 있으면 외부 대상에 접근할 수 없으며
  • 만약에 블록이 쌓여 있고 블록이 외부의 대상을 방문한다면 외부의 대상에 대해retain
  • 을 한 번 진행한다.
  • Block에서 외부 객체에 액세스한 경우Block, 만 더하면Block, Block은 쌓아도 대상에 대해retain을 하지 않습니다
  • 좋은 웹페이지 즐겨찾기