iOS9之后更新的东西

  • 关键字

    • nonlabel:可能为空。作用:一般用于属性声明时使用

      • 1.@property(nonatomic,copy,nullable)NSstring * name;//name字符串可以为空。
      • 2.@property(nonatomic,copy)NSstring *_Nullable name;
    • nonnull:不能为空。作用:一般用于属性声明时使用

      • 1.@property(nonatomic,copy,nonnull)NSstring * name;//name字符串不可以为空,如果仍然赋值为空则会⚠️
      • 2.@property(nonatomic,copy)NSstring *_Nonnull name;
    • null_resettable:必须要处理为空情况,建议重写get方法。作用:get方法不能返回nil,set可以传入为空。

      • @property (nonatomic, strong, null_resettable) NSString *name;
    • __kindof:相当于当前类或者它的子类 作用:举个

      • 咱们用instancetype,系统自动识别当前对象的类 + (instancetype)people 如果+(__kindof Person *)people,表示可以使people类或者它的子类
  • 泛型

  • 什么是泛型,简单来说就是限制一个类型中放什么东西。用法:类型<限制类型>

  • 泛型的声明:在声明类的时候,在类的后面<泛型名称>,如果不用指定的泛型类型会⚠️。 @property (nonatomic, strong) NSMutableArray *arry;

  • 泛型的好处:如果我现在_array或者self.arry,会有提示。如果从数据中取元素,可以使用点语法,id是不可以使用点语法的。

  • 泛型注意点:在数组中,一般用可变数组添加方法,泛型才会生效,如果使用不可变数组,添加元素,泛型没有效果

  • 泛型在开发中使用场景:用于限制集合类型,比如限制NSMutableArray、、NSMutableDictory等等

  • 泛型中的协变和逆变

  • __covariant:协变, 子类转父类

  • __contravariant:逆变 父类转子类

//父类转子类
-(void)contravariant
{
   iOS *ios = [[iOS alloc] init];
   Language *language = [[Language alloc] init];
   
   // 父类转子类
   Person *p = [[Person alloc] init];
   p.language = language;
   
   
   Person *p1 = [[Person alloc] init];
   p1 = p;
}
// 子类转父类
- (void)covariant
{
   iOS *ios = [[iOS alloc] init];
   Language *language = [[Language alloc] init];
   // iOS
   Person *p = [[Person alloc] init];
   
   p.language = ios;
   
   Person *p1;
   p1 = p;

}
  • SFSafariViewController

/**
SFSafariViewController官方默认的跳转方式是modal,如果强行用push返回的时候需要监听SFSafariViewController的代理方法,&&返回后导航栏会消失
&&使用SFSafariViewController的时候需要导入#import ,&&SFSafariViewController最低支持iOS9
*/
    SFSafariViewController *safariVC = [[SFSafariViewController alloc]initWithURL:url];
    [self presentViewController:safariVC animated:YES completion:nil];

你可能感兴趣的:(iOS9之后更新的东西)