iOS9新特性

作者: 打电话记错号码的人 | 来源:发表于2016-07-25 10:19 被阅读263次

    作品链接:http://www.jianshu.com/users/1e0f5e6f73f6/top_articles

    1-iOS9新特性之常见关键字

    1.nullable作用:表示可以为空

    nullable书写规范:
    @property (nonatomic, strong, nullable) NSString *name;
    @property (nonatomic, strong) NSString *_Nullable name;
    @property (nonatomic, strong) NSString *__nullable name;
    
    

    2.nonnull: non:非 null:空

    @property (nonatomic, strong, nonnull) NSString *icon;
    @property (nonatomic, strong) NSString *_Nonnull icon;
    @property (nonatomic, strong) NSString *__nonnull icon;
    
    

    3.在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间,定义 的所有对象属性和方法默认都是nonnull

    4.null_resettable: get:不能返回为空,必须有返回值 set可以为空

    • 注意:如果使用null_resettable,必须 重写get方法或者set方法,处理传递的值为空的情况
    @property (nonatomic, strong, null_resettable) NSString *name;
    

    5._Null_unspecified:不确定是否为空

    @property (nonatomic, strong) NSString *_Null_unspecified name;
    @property (nonatomic, strong) NSString *__null_unspecified name;
    

    总结:

    iOS9新出的关键字:用来修饰属性,或者方法的参数,方法的返回值
      好处:
      1.迎合swift
      2.提高我们开发人员开发规范,减少程序员之间交流
    
      注意:iOS9新出关键字nonnull,nullable只能修饰对象,不能修饰基本数据类型
    

    2-iOS9新特性之泛型

    2.1泛型

    泛型:限制类型
    
     泛型使用场景:
     1.在集合(数组,字典,NSSet)中使用泛型比较常见.
     2.当声明一个类,类里面的某些属性的类型不确定,这时候我们才使用泛型.
    
     泛型书写规范
     在类型后面定义泛型,NSMutableArray<UITouch *> *datas
    
     泛型修饰:
     只能修饰方法的调用.
    
     泛型好处:
     1.提高开发规范,减少程序员之间交流
     2.通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法
    
    
    • 书写方法
    @property (nonatomic, strong) NSMutableArray<NSString *> *datas;
    

    2.2 协变与逆变

    __covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类
    __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子
    
    • Person,开发语言Language,iOS,Java
    • 步骤一
    // 声明泛型  协变可以子类给父类赋值
    @interface Person<__covariant ObjectType> : NSObject
    // 语言
    @property(nonatomic) ObjectType language;
    
    /*
     id:任何对象都能传进来
     Language:在外面调用的时候,没有提示
     IOS* 以后只能传对象
     */
    
    - (ObjectType)language;
    - (void)setLanguage:(ObjectType)language;
    @end
    
    Person,开发语言Language,iOS,Java
    
    
    • 步骤二
    Person<IOS *> *iosP = [[Person alloc]init];
    Person <Language *> *p = [[Person alloc] init];
    
    // 如果子类想给父类赋值,协变
        iosP = p;
    //父类给子类赋值,逆变
     p = iosP;
    

    3.03-iOS9新特性之__kindof

    1.介绍

     __kindof:表示当前类或者它子类
    
     __kindof书写格式:放在类型前面,表示修饰这个类型(__kindof Person *)
    
     __kindof  :在调用的时候,很清楚的知道返回类型
    

    2.id的缺陷

         id坏处:
                 1.不能在编译的时候检查真实类型
                 2.返回值,没有提示
                 3.调用时不能识别当前的类
    
    

    3.——kindof与一般类型的区别

    // 会自动识别当前对象的类
    // __kindof Person *:表示可以是Person类或者它的子类
    + (__kindof Person *)person;
    
    // 仅仅表示只能是Person类
    + (Person *)person1;
    

    相关文章

      网友评论

        本文标题:iOS9新特性

        本文链接:https://www.haomeiwen.com/subject/tbugjttx.html