iOS 개발 학습 노트--objective-c의 Block 초보자

2321 단어

블락 소개

  • 블록은 익명의 함수 블록으로 이 블록은 매개 변수로 다른 대상에게 전달할 수 있다.
  • 블록은 프록시 프로토콜의 기능과 마찬가지로 대상 통신에 사용된다.

  • 블록 구문 정의


    *Block 변수 정의: 반환값(^ 변수 이름)(함수 매개변수...)
    int (^myBlocks)(int);
    

    *Block 함수 생성
    myBlocks = ^(int a){
        int result = a * a;
        return result;
    }
    

    *Block 함수 호출
    int ret = myBlocks(10);
    
  • Block은 익명 함수 코드 블록 1>Block이 성명할 때, 값을 전달할 때 코드 블록이 실행되지 않았습니다. 2>Block이 리셋될 때 코드 블록이 실행됩니다
  • typedef가 Block 형식을 이름 바꾸기(파라미터 형식과 반환값 형식, 그리고 파라미터가 있는지 없는지, 반환값이 있는지 없는지 모두 Block 형식을 만들 수 있음)
  • typedef int (^MathBlock)(int, int);
    MathBlock mulBlock;
    mulBlock = ^(int a, int b){
       
            return a * b;
    };
    NSLog(@"a*b = %d", mulBlock(2, 3));
    

    Block 대상 간 통신 구현(보모와 아이 문제)


    어린이:
    #import 
    @interface Child : NSObject
    
    typedef void(^HandleChildBlock)(Child *);
    // 
    @property(nonatomic, assign)NSInteger cleanValue;
    //Block copy
    @property(nonatomic, copy)HandleChildBlock washBlock;
    
    @end
    
    #import "Child.h"
    
    @implementation Child
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            _cleanValue = 100;
            // , , 
            [NSTimer scheduledTimerWithTimeInterval:1
                                             target:self
                                           selector:@selector(timerAction:)
                                           userInfo:nil
                                            repeats:YES];
        }
        return self;
    }
    
    - (void)timerAction:(NSTimer *)timer {
        
        NSLog(@"cleacValue:%lu", _cleanValue);
        _cleanValue--;
        
        if (_cleanValue == 95) {
            // 95 , 
            if (self.washBlock) {
                
                _washBlock(self);
            
            }
            
        }
        
    }
    
    @end
    
    

    가정부류:
    #import 
    @class Child;
    
    @interface Nanny : NSObject
    
    - (void)washChild:(Child *)child;
    
    @end
    
    #import "Nanny.h"
    #import "Child.h"
    
    @implementation Nanny
    
    - (void)washChild:(Child *)child {
        
        child.washBlock = ^(Child *ch){
            //Block 
            NSLog(@" ");
            ch.cleanValue = 100;
            
        };
    }
    @end
    

    좋은 웹페이지 즐겨찾기