zoukankan      html  css  js  c++  java
  • 【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];
  • 相关阅读:
    今天20,明天21
    Windows Server 2003 R2 修复Windows Server 2003
    上门服务,谁上谁的门?
    重构代码(2)处理空字符串
    看你知道不知道之-别惹我Msgbox的Title
    注册GooglePage成功
    [zz]64bit Linux下error: gnu/stubs32.h: No such file or directory错误解决办法
    [zz] libstdc++ bad value
    [zz]ctags和vim
    [zz]写在KVM (Kernelbased Virtual Machine) 安装成功后
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4312034.html
Copyright © 2011-2022 走看看