iOS9 相關(guān)
iOS9新出關(guān)鍵字 nonnull
,nullable
,null_resettable
,_Null_unspecified
只能修飾對象,不能修飾基本數(shù)據(jù)類型.
iOS9新出的關(guān)鍵字:用來修飾屬性,或者方法的參數(shù),方法的返回值
好處:
1.迎合swift,因?yàn)閟wift 是強(qiáng)類型的
2.提高我們開發(fā)人員開發(fā)規(guī)范,減少程序員之間交流
-
1孤页、
nullable
作用:表示可以為空
書寫規(guī)范:
// 方式一:
@property (nonatomic, strong, nullable) NSString *name;
// 方式二:
@property (nonatomic, strong) NSString *_Nullable name;
// 方式三:
@property (nonatomic, strong) NSString *__nullable name;
- 2蟋滴、`nonnull`
non:非 null:空
書寫格式:
```
// 方式一
@property (nonatomic, strong, nonnull) NSString *icon;
// 方式二
@property (nonatomic, strong) NSString * _Nonnull icon;
// 方式三
@property (nonatomic, strong) NSString * __nonnull icon;
//方式四
在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間,定義的所有對象屬性和方法默認(rèn)都是nonnull
```
方法中,關(guān)鍵字書寫規(guī)范
```
- (nonnull NSString *)test:(nonnull NSString *)str;
- (NSString * _Nonnull)test1:(NSString * _Nonnull)str;
```
- 3、`null_resettable`
get:不能返回為空, set可以為空 例如:Controller中的view必須不能為空的
- (UIView *)view {
if(_view == nil) {
[self loadView];
[self viewDidLoad];
}
return _view;
}
如果使用null_resettable聲明的屬性阁猜,必須保證setter or getter 是有值的
(void)setName:(NSString *)name
{
if (name == nil) {
name = @"123";
}
_name = name;
}(NSString *)name
{
if (_name == nil) {
_name = @"123";
}
return _name;
}
null_resettable: get:不能返回為空, set可以為空
// 注意;如果使用null_resettable,必須 重寫get方法或者set方法,處理傳遞的值為空的情況
// 書寫方式:
@property (nonatomic, strong, null_resettable) NSString *name;
_Null_unspecified:不確定是否為空 例如:不知道是使用set or get方法 如 self.name
書寫方式只有這種
// 方式一
@property (nonatomic, strong) NSString *_Null_unspecified name;
// 方式二
@property (nonatomic, strong) NSString *__null_unspecified name;
- 4迟郎、泛型
>
作用:限制類型
>
泛型使用場景:
1.在集合(數(shù)組,字典,NSSet)中使用泛型比較常見.
2.當(dāng)聲明一個(gè)類,類里面的某些屬性的類型不確定,這時(shí)候我們才使用泛型.
>
泛型書寫規(guī)范
在類型后面定義泛型,NSMutableArray<UITouch *> *datas
>
泛型修飾:
只能修飾方法的調(diào)用.
>
泛型好處:
1.提高開發(fā)規(guī)范,減少程序員之間交流
2.通過集合取出來對象,直接當(dāng)做泛型對象使用,可以直接使用點(diǎn)語法
#
```
__covariant(協(xié)變):用于泛型數(shù)據(jù)強(qiáng)轉(zhuǎn)類型,可以向上強(qiáng)轉(zhuǎn),子類 可以轉(zhuǎn)成 父類
__contravariant(逆變):用于泛型數(shù)據(jù)強(qiáng)轉(zhuǎn)類型,可以向下強(qiáng)轉(zhuǎn), 父類 可以 轉(zhuǎn)成子類
```
常見場景:
場景一:
@property (nonatomic, strong) NSMutableArray<NSString *> *datas;
```
datas 表示里面的元素都是字符串類型,這樣取出來的元素就可以調(diào)用對象本身的方法,如果不用泛型,則數(shù)組中的元素是id類型的形娇,還需要轉(zhuǎn)成字符串才可以調(diào)用自身的方法。
場景二:
- 5怒允、
__kindof
作用: 表示當(dāng)前類或者它子類
__kindof :在調(diào)用的時(shí)候,很清楚的知道返回類型
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;