iOS9新特性
2016-06-23 17:04
387 查看
一、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];
io
b20d
sP.language = [[IOS
alloc] init];
// iosP = p;
p = iosP;//子类转成父类
三、__kindof
__kindof表示当前类或者它的子类,使用__kindof,在调用的时候很清楚的知道返回值的类型
__kindof Person *:表示可以是Person类或者它的子类
使用id坏处:
1.不能在编译时检查真实类型
2.返回值,没有提示
作用:用于修饰属性,方法参数,方法返回值
好处: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];
io
b20d
sP.language = [[IOS
alloc] init];
// iosP = p;
p = iosP;//子类转成父类
三、__kindof
__kindof表示当前类或者它的子类,使用__kindof,在调用的时候很清楚的知道返回值的类型
__kindof Person *:表示可以是Person类或者它的子类
使用id坏处:
1.不能在编译时检查真实类型
2.返回值,没有提示
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法