iOS開發學習筆記----objective-c之block初探

Block介紹

  • Block是一個匿名的函數代碼塊,此代碼塊可以當做參數傳給其他對象。
  • Block與代理協議的功能一樣,都是用于對象通信的。

Block語法定義

*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 <Foundation/Foundation.h>
@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 <Foundation/Foundation.h>
@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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容