iOS9新特性
一、iOS9新出的關鍵字
作用:用於修飾屬性,方法引數,方法返回值
好處:1.迎合swift
2.提高開發人員的規範,減少程式設計師之間的交流
關鍵字:nonnull 物件非空
nullable 物件可以為空
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.返回值,沒有提示