美文网首页iOS Developer
iOS开发学习笔记----objective-c之block初探

iOS开发学习笔记----objective-c之block初探

作者: 氯化钠哦 | 来源:发表于2016-04-15 19:55 被阅读58次

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

相关文章

  • ReactiveCocoa相关

    随手记录: 1、iOS开发系列--Objective-C之KVC、KVO 2、ReactiveCocoa初探

  • iOS开发学习笔记----objective-c之block初探

    Block介绍 Block是一个匿名的函数代码块,此代码块可以当做参数传给其他对象。 Block与代理协议的功能一...

  • iOS开发-由浅至深学习block

    iOS开发-由浅至深学习block iOS开发-由浅至深学习block

  • Block

    Block Block定义以及表达式 在iOS开发中针对于Objective-C我们经常提到Block,对于Swi...

  • CAShapeLayer初探

    转自: iOS开发之CAShapeLayer初探拓展: CAShapeLayer 一、CAShapeLayer简介...

  • 【Objective-c】_蓝牙开发

    ios蓝牙开发学习笔记(一)蓝牙概述 ios蓝牙开发学习笔记(二)central角色的实现 ios蓝牙开发学习笔记...

  • KVC

    iOS 如何使用KVC iOS开发UI篇—Kvc简单介绍 iOS开发系列--Objective-C之KVC、KVO

  • iOS+面试+思维 进阶之路

    iOS+思维 进阶篇 原理篇 第一节:《Objective-C 高级编程》学习笔记Objective-C之GCD多...

  • OC--Block总结

    参考 Block编译代码解读:block没那么难(一、二、三)iOS进阶——iOS(Objective-C) 内存...

  • (三)Block之截获变量和对象

    相关文章 (一)Block的实质初探 (二)Block之存储域 NSConcreteStackBlock,NSCo...

网友评论

    本文标题:iOS开发学习笔记----objective-c之block初探

    本文链接:https://www.haomeiwen.com/subject/dkhnlttx.html