zoukankan      html  css  js  c++  java
  • OC基础(19)

    类扩展(Class Extension)

    本小节知识点:

    1. 【理解】什么是类扩展
    2. 【理解】类扩展书写格式

    1.什么是类扩展

    • 延展类别又称为扩展(Extendsion),Extension是Category的一个特例

    • 可以为某个类扩充一些私有的成员变量和方法

      • 写在.m文件中
      • 英文名是Class Extension

    2.类扩展书写格式

    @interface 类名 ()
    @end
    
    • > 对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”

    Block基本概念

    本小节知识点:

    1. 【了解】什么是Block
    2. 【理解】block的格式

    1.什么是Block

    • Block是iOS中一种比较特殊的数据类型

    • Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛

      • 动画
      • 多线程
      • 集合遍历
      • 网络请求回调
    • Block的作用

      • 用来保存某一段代码, 可以在恰当的时间再取出来调用
      • 功能类似于函数和方法

    2.block的格式

    • Block的定义格式
    返回值类型 (^block变量名)(形参列表) = ^(形参列表) {
    
    };
    • block最简单形式
    void (^block名)() = ^{代码块;}
    
    例如:
    void (^myBlock)() = ^{ NSLog(@"李南江"); };
    • block带有参数的block的定义和使用
    void (^block名称)(参数列表)
    = ^ (参数列表) { // 代码实现; }
    
    例如:
    void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
    • 带有参数和返回值的block
    返回类型 (^block名称)(参数列表)
    = ^ (参数列表) { // 代码实现; }
    
    例如:
    int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
    • 调用Block保存的代码
    block变量名(实参);

    typedef和Block

    本小节知识点:

    1. 【了解】函数指针回顾
    2. 【掌握】block和typedef

    1.函数指针回顾

    • 函数指针使用
    int sum(int value1, int value2)
    {
        return value1 + value2;
    }
    
    int minus(int value1, int value2)
    {
        return value1 - value2;
    }
    
    int main(int argc, const char * argv[]) {
        int (*sumP) (int, int) = sum;
        int res = sumP(10, 20);
        NSLog(@"res = %i", res);
    
        int (*minusP) (int , int) = minus;
        res = minusP(10, 20);
        NSLog(@"res = %i", res);
        return 0;
    }
    • 函数指针别名
    typedef int (*calculate) (int, int);
    int main(int argc, const char * argv[]) {
        calculate sumP = sum;
        int res = sumP(10, 20);
        NSLog(@"res = %i", res);
        calculate minusP = minus;
        res = minusP(10, 20);
        NSLog(@"res = %i", res);
        return 0;
    }

    2.block和typedef

    • block使用 

    • int main(int argc, const char * argv[]) {

    • int (^sumBlock) (int, int) = ^(int value1, int value2){ return value1 + value2; };

    • int res = sumBlock(10 , 20); NSLog(@"res = %i", res);

      int (^minusBlock) (int, int) = ^(int value1, int value2){ return value1 - value2; };

    • res = minusBlock(10 , 20); NSLog(@"res = %i", res); return 0;

    • }

    • block别名

    int main(int argc, const char * argv[]) {
        calculateBlock sumBlock = ^(int value1, int value2){
            return value1 + value2;
        };
        int res = sumBlock(10, 20);
        NSLog(@"res = %i", res);
        calculateBlock minusBlock = ^(int value1, int value2){
            return value1 - value2;
        };
        res = minusBlock(10, 20);
        NSLog(@"res = %i", res);
    
        return 0;
    }

    Block注意事项

    本小节知识点:

    1. 【掌握】Block注意事项

    1.Block注意事项

    • 在block内部可以访问block外部的变量
    int  a = 10;
    void (^myBlock)() = ^{
        NSLog(@"a = %i", a);
        }
    myBlock();
    输出结果: 10
    • block内部也可以定义和block外部的同名的变量(局部变量),此时局部变量会暂时屏蔽外部
    int  a = 10;
    void (^myBlock)() = ^{
        int a = 50;
        NSLog(@"a = %i", a);
        }
    myBlock();
    输出结果: 50
    • 默认情况下, Block内部不能修改外面的局部变量
    int b = 5;
    void (^myBlock)() = ^{
        b = 20; // 报错
        NSLog(@"b = %i", b);
        };
    myBlock();
    
    • Block内部可以修改使用__block修饰的局部变量
    • objc __block int b = 5;
    • void (^myBlock)() = ^{ b = 20;NSLog(@"b = %i", b); };
    • myBlock();
    • 输出结果: 20
  • 相关阅读:
    http协议中的状态码(status code),超文本传输协议状态码
    web前端逻辑计算,血的教训
    js 关于字符串转数字及数字保留位数的控制
    js,setTimeout与setInterval的用法
    javaScript 字符串与unicode码之间的相互转换,函数的封装
    基于jquery,ajax请求及自我终止的函数封装。
    进入博客园后的第一篇文章
    答:SQLServer DBA 三十问之六:Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
    答:SQLServer DBA 三十问之五:有关视图索引
    答:SQLServer DBA 三十问之三:有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理
  • 原文地址:https://www.cnblogs.com/zhoudaquan/p/5017488.html
Copyright © 2011-2022 走看看