• 【iOS系列】-oc中特有的语法


    【iOS系列】-oc中特有的语法

    oc数据类型:

     1,基本类型     
     2,对象类型
     3,id
     4,BOOL
     5,block
     6,SEL 
    

    1:category

    使用继承关系来扩充一个类,有一个弊病,高耦合性

    category(分类,类别)
    能够帮我们扩充一个类的功能

    1,只要是在原类中生成的成员变量都可以在分类中直接访问,不能在分类中生成员变量

    2,如果分类中定义实现了与原类中相同的方法,那么原类中的方法相当于被覆盖掉了。
    注:在实际的开发中,最好不要出现方法覆盖

    //指向函数的指针
    void test()
    {
        NSLog(@"test");
    }
     void (*myTest)() = test;
     myTest();
    

    2:block 指向函数的指针比较像

    block就是弥补了 指向函数的指针,不能够直接保存一个函数体(代码块)

    //定义(无返回值)
     void (^myBlock)() = ^{
                NSLog(@"test");
      };
    //调用
     myBlock();
    
    
    //定义(有返回值)
     int (^sumBlock)(int a, int b) = ^int (int a, int b) {
           
                return a + b;
      };
      //调用   
      int result = sumBlock(10,20);
    

    注:如果想要改变,block代码块之外的变量值,就必须在变量前加入 __block关键字

    3:protocol(协议)

    意思同:java中的接口

    1,谁遵循协议,谁就要实现协议中定义的方法
    2,协议文件本身只是提供方法的声明,并不实现方法
    3,协议本身也可以遵循其他协议,NSObject是一个基础协议,协议也可以同时遵循多个其他协议
    4,父类遵循了那些协议,子类同样遵循那些协议
    5,一个类可以同时遵循多个协议

    @required//下面的方法,必须实现,默认都是必须实现的
    @optional //下面的方法,可选实现

    4:SEL:包装方法

    - (void)test1;
    - (void)test2:(NSString *)n;
    - (NSString *)test3;
    
    		    
    //无参数
    [t test1];
    //使用@selector就能够把一个方法包装成 SEL数据类型
    SEL s1 = @selector(test1);
    //包装后的方法的执行
    [p performSelector:s1];
    //或者这样调用,更为常用一些
    [p performSelector:@selector(test1)];
    
    
    
    //带参数
    SEL s2 = @selector(test2:);
     
    [p performSelector:s2 withObject:@"135047654"];
    
    //带返回值
    SEL s3 = @selector(test3);
     
    NSString * str = [p performSelector:s3];
  • 相关阅读:
    CentOS安装gotop
    oracle 非sys用户创建新用户 授权后 plsql看不到视图
    解决Eclipse+ADT连接夜神模拟器失败问题
    Ext JS v2.3.0 Ext.grid.ColumnModel renderer Record 获取列值
    vi常用快捷键汇总
    外键的变种
    完整性约束
    数据类型2
    数据类型
    表的操作
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4312034.html
Copyright © 2020-2023  润新知