iOS 开发基础(10)-- iOS9新特性总结

作者: 西风颂 | 来源:发表于2016-07-26 15:55 被阅读263次

    关键字

    iOS9新出的关键字主要有:

    nullable,nonnull,null_resettable,null_unspecified.用来修饰属性,或者方法的参数,方法的返回值 ,只能用来修饰对象,不能修饰基本数据类型;

    属性中关键字的书写:

    //nullable表示可以为空;nonnull表示不可以为空;
    /*
    null_resettable:get方法返回不能为空,set方法可以为空;
    如果使用该关键字修饰属性,需要重写get方法或者set方法,处理传递的值为空的情况;
    null_unspecified表示不确定是否为空
    */
    //第一种写法
    @property (nonatomic, strong, nullable) NSString *name;
    //第二种写法
    @property (nonatomic, strong) NSString *_Nullable name;
    //第三种写法
    @property (nonatomic, strong) NSString *__nullable name;
    

    注意:
    在宏 NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END之间定义的所有对象属性和方法默认都是nonnull

    null_resettable只有第一种写法;其它几个关键字的书写方式都是一样的;

    方法中关键字的书写:

    - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER;
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
    - (NSString * _nullable)test:(NSString * _nullable)string;
    - (nullable NSString *)test:(nullable NSString *)string;
    

    关键字的作用:

    1.与 swift 对接;
    2.提高开发人员的开发规范,减少沟通成本;

    泛型使用场景及用法:

    1.主要在集合(数组,字典,NSSet)中比较常见;
    2.当声明一个类,类里面的某些属性的类型不确定的时候,此时我们才使用泛型.
    3.通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法;通过泛型可以显示集合类型;

    书写规范:

    @property (strong, nonatomic) NSMutableArray <NSString *> *array;
    //array数组当中只能存放NSString类型的对象.如果向array中添加非NSString类型的对象,编译器回报警告.只能修饰方法的调用;
    

    泛型的协变和逆变

    __covariant(协变):用于泛型数据强转类型,可以向上强转,子类可以转成父类;
    __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类可以转成子类;

    __kindof

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

    id :
    1.不能编译的时候检查类的真实类型;
    2.返回值没有提示;
    instancetype:
    1.可以自动的检测类的真实类型;
    书写规范:

    - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
    

    UIStackView

    在iOS9中苹果在UIKit框架中引入了一个新的视图类UIStackView。UIStackView类可以帮我们布局UI控件,而我们不需要设置任何约束或设置很少的约束就可以,其他都由UIStackView帮我们自动完成了。
    UIStackView 是 UIView 的子类,是用来约束子控件的一个控件。但他的作用仅限于此,他不能用来呈现自身的内容,类似于 backgroundColor。当然了,这个控件相当易学,属性只有4个。分别为:

    Axls: 子控件的布局方向,水平或者垂直
    Alignment: 对齐方式
    Distributlon: 根据内部子视图尺寸对子视图尺寸进行动态调整
    Spacing: 子控件间的间距

    在Interface Builder中使用UIStackView就类似于使用一个UI控件一样,通过让将其他视图成为UIStackView的子视图来进行布的,UIStackView也可以嵌套多个UIStackView。
    值得注意的是,UIStackView虽然继承自UIView,但是并不参与屏幕的渲染,重写drawRect:方法也是无效的。

    UIStackView设置面板.png

    可以看到在属性左边有个加号,点开来是这样的:


    UIStackView设置面板.png

    这其实是 UIStackView 也集成了 Size Class,Size Class 是用来布局不同尺寸屏幕的。在这里可以通过选择不同的尺寸来更新子控件约束。

    UIStackView使用arrangedSubviews数组来管理子视图。需要注意的是这个数组是一个readonly的属性,我们需要调用方法对arrangedSubviews数组进行操作。

    //初始化数组:
    - (instancetype)initWithArrangedSubviews:(NSArray<__kindof UIView *> *)views;
    //添加子视图:
    - (void)addArrangedSubview:(UIView *)view;
    //移除子视图:
    - (void)removeArrangedSubview:(UIView *)view;
    //根据下标插入视图:
    - (void)insertArrangedSubview:(UIView *)view atIndex:(NSUInteger)stackIndex;
    

    其它UIStackView的约束设置和其它控件的操作都是一样的;

    相关文章

      网友评论

        本文标题:iOS 开发基础(10)-- iOS9新特性总结

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