iOS 9 新特性

關鍵字

  • iOS9新出的關鍵字:用來修飾屬性,或者方法的參數,方法的返回值
  • 好處:

    1. 迎合swift
    2. 提高我們開發人員開發規範,減少程序員之間交流
  • 注意: iOS9新出關鍵字nonnull,nullable,null_resettable,_Null_unspecified只能修飾對象,不能修飾基本數據類型

/**

 1. 首字母不帶下滑線的修飾類名(eg. nullable

 2. 首字母帶一個下劃線,則首字母大寫,修飾對象(eg. _Nullable

 3. 首字母帶兩個下劃線,則首字母小寫,修飾對象(eg. __nullable

 4. 大多數一般只有第一種

 */

nullable

作用:表示可以爲空

nullable書寫規範:

// 方式一:

@property (nonatomic, strong, nullable) NSString *name;

// 方式二:

@property (nonatomic, strong) NSString *_Nullable name;

// 方式三:

@property (nonatomic, strong) NSString *__nullable name;

nonnull

作用:不能爲空

nonnull: non: null:


書寫格式:

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


@property (nonatomic, strong) NSString * _Nonnull icon;


@property (nonatomic, strong) NSString * __nonnull icon;


NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END之間,定義的所有對象屬性和方法默認都是nonnull

null_resettable

作用: get:不能返回爲空, set可以爲空

// 書寫方式:

@property (nonatomic, strong, null_resettable) NSString *name;


// 注意;如果使用null_resettable,必須 重寫get方法或者set方法,處理傳遞的值爲空的情況

_Null_unspecified

作用:不確定是否爲空

// 書寫方式只有這種

// 方式一

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

// 方式二

@property (nonatomic, strong) NSString *__null_unspecified name;

泛型(限制類型)

使用場景

  1. 限制集合中的類型(數組、字典、NSSet) 
    注意:只能檢測方法的調用,因爲聲明的泛型,只能放在方法中
  2. 當一個類在聲明的時候,某個對象的屬性不確定,只有創建對象的時候才確定,可以使用泛型

好處

  1. 提高開發規範,減少程序員之間交流
  2. 通過集合取出來對象,直接當做泛型對象使用,可以直接使用點語法

書寫格式

放在類型後面,表示限制這個類型。

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

自定義泛型:模仿數組

  • 需求:假設有個Person,這個人會編程語言,但是在定義的時候不確定,只有在創建對象的時候才確定。
  • language屬性的類型就有講究了
  • id 類型:表示可以傳任何對象
  • Launguage類型,在賦值的時候沒有提示
  • 泛型,聲明泛型,在創建對象的時候,確定泛型,在賦值就有提示了。

@interface Person<ObjectType> : NSObject {

    // 語言

    @property (nonatomic)  ObjectType language;

}

協變,逆變

作用:用於轉換類型

  • 默認帶有泛型的變量,互相賦值有報警告,使用協變,逆變,就能解決.
  • 協變(__covariant): 向上轉型, 子類轉父類
  • 逆變(__contravariant):向下轉型 父類轉子類

__kindof

id壞處

  1. 不能在編譯的時候檢查真實類型
  2. 返回值,沒有提示
  3. 可以調用任何方法,編譯時不報錯

instancetype

  1. 會自動識別當前對象的類,返回當前調用類的對象 
    + (instancetype)person;

__kindof :

在調用的時候,很清楚的知道返回類型(類似於instancetype,但instancetype只能用於初始化中)

作用: 
1. 將此類型指定爲class_name或class_name的子類,告訴編譯器這兩者均能適配。 
2. Objective-C是動態類型,編譯器會在編譯時做類型匹配,不會有編譯警告,更不會報錯。 
場景: 
1. 泛型 
2. 方法返回值

//

- (nullable __kindof UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;  visible or index path is out of range;

// returns nil if cell is not


@property (nonatomic, readonly) NSArray<__kindof UITableViewCell *> *visibleCells;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章