• OC之Block的用法和实现委托


    • Block的基本概念
    • Block的基本用法
    • Block实现委托机制

    一、Block的基本概念

    Block是程序的代码块,这个代码块可以在需要的时候执行。IOS开发中,block到处可见,所以学好很重要

    二、Block的基本用法

    //
    //  main.m
    //  Block
    //
    //  Created by apple on 14-3-26.
    //  Copyright (c) 2014年 apple. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    
    //最基本的用法
    void test()
    {
        int (^Sum)(int, int) = ^(int a, int b)
        {
            return a + b;
        };
        
        
        NSLog(@"%i", Sum(10, 11));
    }
    
    
    //也是基本用法,另外Block代码段中可以使用外边的mul变量,但是不可以改变他的值,如果下改变他的值,可以使用__block来定义mul
    void test1()
    {
        int mul = 7;
        int (^myBlock)(int) = ^(int num)
        {
            return mul * num;
        };
        
        int c = myBlock(7);
        
        NSLog(@"%i", c);
    }
    
    //改变外边变量的值
    void test2()
    {
        __block int mul = 7;
        int (^myBlock)(int) = ^(int num)
        {
            mul = 10;
            NSLog(@"mul is %i", mul);
            return mul * num;
        };
        
        int c = myBlock(7);
        
        NSLog(@"%i", c);
    }
    
    //给block起一个别名,之后我们就可以任意命名的来使用block
    void test3()
    {
        typedef int (^MySum)(int, int);
        
        MySum sum = ^(int a, int b)
        {
            return a + b;
        };
        
        int c = sum(20, 39);
        
        NSLog(@"%i", c);
        
    }
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            test();
        }
        return 0;
    }

    OK,都有注释。在main函数中调用即可测试

    三、Block来实现委托模式

    //
    //  Button.h
    //  Block_Button
    //
    //  Created by apple on 14-3-26.
    //  Copyright (c) 2014年 apple. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    @class Button;
    
    //给block给一个别名ButtonBlock
    typedef void (^ButtonBlock)(Button *);
    
    @interface Button : NSObject
    
    //定义一个block的成员变量,暂时写成assign
    @property (nonatomic, assign) ButtonBlock block;
    
    -(void)click;
    
    @end
    //
    //  Button.m
    //  Block_Button
    //
    //  Created by apple on 14-3-26.
    //  Copyright (c) 2014年 apple. All rights reserved.
    //
    
    #import "Button.h"
    
    @implementation Button
    
    //模拟点击
    -(void)click
    {
        //回调函数,回调block
        _block(self);
    }
    
    @end
    //
    //  main.m
    //  Block_Button
    //
    //  Created by apple on 14-3-26.
    //  Copyright (c) 2014年 apple. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Button.h"
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            Button *btn = [[[Button alloc] init] autorelease];
            
            //回调的函数
            btn.block = ^(Button *btn)
            {
                NSLog(@"%@被点击", btn);
            };
            
            [btn click];
            
        }
        return 0;
    }
  • 相关阅读:
    docker 报错 Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
    Python list 与 str 互转
    小程序 url传参 参数值过长 接收时候 内容不全的问题
    es6新增对象字面量语法
    Squid Proxy
    常见开发工具安装方法
    批判世界之前先清理你的房间
    windows的双网卡问题
    SSH
    【逆向】Yara规则编写安装与使用教程
  • 原文地址:https://www.cnblogs.com/letougaozao/p/3626780.html
Copyright © 2020-2023  润新知