iOS9新特性之常见关键字

iOS9新出的关键字,用来修饰属性,或者方法的参数,方法的返回值
好处:

  • 迎合swift
  • 提高我们开发人员开发规范,减少程序员之间的交流

nullable和nonnull

nullable:表示可以为空,nonnull为非空
只能修饰对象,不能修饰int等,因为nil只能赋值给对象
书写规范一样,以nullable为例:

  • 方式一:
@property (nonatomic, strong, nullable) NSString *name;
  • 方式二:
@property (nonatomic, strong) NSString *_Nullable name;
  • 方式三:
@property (nonatomic, strong) NSString *__nullable name;
  • 方式四:修饰方法
- (nonnull NSString *)name:(nonnull NSString *)str;
- (NSString *_Nonnull)name;
  • 方式五:

NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END之间定义的所有对象属性和方法默认都是nonnull

NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) NSString *name;
NS_ASSUME_NONNULL_END

null_resettable

// null_resettable:get不能返回空,set可以为空(比如控制器的view)
@property (nonatomic, copy, null_resettable) NSString *name;

null_resettable必须重写setter或者getter方法,处理传递的值为空的情况(实际重写不判断为空警告也没了),不然会有警告。

null_unspecified

null_unspecified不确定是否为空

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

泛型

泛型:限制类型
泛型使用场景:

  • 在集合(数组、字典、NSSet)中使用泛型比较常见。
  • 当声明一个类。类里面的某些属性的类型不确定,这时候我们才使用泛型。

泛型好处:

  • 提高开发规范,减少程序员之间交流
  • 通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法
@property (nonatomic, strong) NSArray *nameArr;

// 后面使用时可以直接调出对应的方法
self.nameArr[0].length;
// ObjectType可以自己指定名字
@interface Person : NSObject
@property (nonatomic) ObjectType language;

- (ObjectType)language;
@end

Person *p = [Person new];
p.language = @"ss";

__covariant

(协变): 用于泛型数据强转类型,可以向上强转,子类可以转成父类。

@interface Person<__covariant ObjectType> : NSObject

@property (nonatomic) ObjectType language;

- (ObjectType)language;
@end

__contravariant

(逆变): 用于泛型数据强转类型,可以向下强转,父类可以转成子类。

@interface Person<__contravariant ObjectType> : NSObject
@end

__kindof

__kindof表示当前类或者它的子类
好处:

  • 可以在编译的时候,检查真实类型
  • 返回值会有提示修饰的当前类
@property (nonatomic, strong) NSArray<__kindof NSString *> *nameArr;

- (__kindof NSString *)test;

你可能感兴趣的:(iOS9新特性之常见关键字)