1. 程式人生 > >iOS9新特性

iOS9新特性

一、iOS9新出的關鍵字

作用:用於修飾屬性,方法引數,方法返回值


好處:1.迎合swift

           2.提高開發人員的規範,減少程式設計師之間的交流


關鍵字:nonnull 物件非空

               nullable 物件可以為空

       null_resettable :get:不能返回為空, set可以為空

             注意

:這些關鍵字只用來修飾物件,並不能用來修飾資料型別。如果使用null_resettable,必須重寫get方法或者set方法,處理傳遞的值為空的情況


幾種定義的方式:(如果在使用這些成員變數時沒有按照關鍵字約束賦值,系統會報警告)

@property(nonatomic,copy,nonnull)NSString *icon;

@property(nonatomic,copy)NSString * _Nonnull icon1;

@property(nonatomic,copy)NSString * __nonnull icon2;

NS_ASSUME_NONNULL_BEGIN

@property(nonatomic,copy)NSString *name;

NS_ASSUME_NONNULL_END


二、泛型、協變、逆變

泛型:限制類型

泛型使用場景:

1.在集合(陣列,字典,nsset)中使用泛型比較常見

2.當申明一個類時,其中一些屬性的型別不確定時,這時我們才使用泛型

泛型書寫規範:

在型別後面定義泛型型別

@property (nonatomic, strong) NSMutableArray<NSString *> *datas;

泛型好處:

1.提高開發規範,減少程式設計師之間的交流

2.通過集合取出物件,直接當做泛型型別的物件使用,可以直接使用點語法


下面看個例子:

person類有個language屬性,當我們例項化person時,加入了iOS泛型,這樣我們給language屬性賦值時就會提示它的型別為iOS類。這時賦值其它型別時系統會報警告。但如果泛型沒有確定時,這時返回型別是id。



 __covariant(協變):用於泛型資料強轉型別,可以向上強轉,子類 可以轉成 父類

 __contravariant(逆變):用於泛型資料強轉型別,可以向下強轉, 父類 可以 轉成子類


以協變為例:

// 首先宣告泛型

@interface Person<__covariant ObjectType> : NSObject

程式碼實現:

  Person<Language *> *p = [[Person alloc] init];

  Person<IOS *> *iosP = [[Person alloc] init];

  iosP.language = [[IOS alloc] init];

  //  iosP = p;

  p = iosP;//子類轉成父類



三、__kindof

__kindof表示當前類或者它的子類,使用__kindof,在呼叫的時候很清楚的知道返回值的型別

__kindof Person *:表示可以是Person類或者它的子類


使用id壞處:

1.不能在編譯時檢查真實型別

2.返回值,沒有提示