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];
  • 相关阅读:
    POJ 1795 DNA Laboratory
    CodeForces 303B Rectangle Puzzle II
    HDU 2197 本源串
    HDU 5965 扫雷
    POJ 3099 Go Go Gorelians
    CodeForces 762D Maximum path
    CodeForces 731C Socks
    HDU 1231 最大连续子序列
    HDU 5650 so easy
    大话接口隐私与安全 转载
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4312034.html
Copyright © 2011-2022 走看看