iOS 9 关键字的简单使用
前言:
在iOS 9 苹果推出了很多关键字, 目的其实很明确, 主要就是提高开发人员的效率, 有益于程序员之间的沟通与交流, 在开发中代码更加规范!
1. nullable 与 nonnull
nullable : 表示可以为 nil
nonnull : 表示不可以为 nil
这两个关键字只能修饰对象, 不能修饰基本数据类型, 可以用在属性, 方法的参数, 方法的返回值使用, 在默认情况下, 不加nullable, setter 和 getter 都是可以为nil
我们来看下如何使用, 以nullable为例如下:
@property (nonatomic, strong, nullable) NSArray *array;
@property (nonatomic, strong) NSArray * __nullable array;
@property (nonatomic, strong) NSArray * _Nullable array;
在方法中怎么使用呢? 我们来看看:
- (nonnull NSString *)testString:(nonnull NSString *)string;
- (NSString * _Nonnull)testString:(NSString * _Nonnull)string;
- (NSString * __nonnull)testString:(NSString * __nonnull)string;
我们在调用属性或者方法时候, 系统会提示你当前的对象是否为nil如下图:
另外还有2个宏如下:
NS_ASSUME_NONNULL_BEGIN
NS_ASSUME_NONNULL_END
在这两个宏之间的所有对象属性默认都是nonnull
关键字: null_resettable
getter :不可以为nil
setter :可以为nil
如果使用 null_resettable 就必须重写 getter或者setter方法. 目的是为了处理值为空的情况
使用方法如下:
@property (nonatomic, strong, null_resettable) UIView *testView;
关键字: _Null_unspecified
不确定是否为空, 此关键字个人感觉意义不是很大, 因为对象属性默认就是不确定的
使用方法如下:
@property (nonatomic, strong) UIView * _Null_unspecified testView;
@property (nonatomic, strong) UIView * __null_unspecified testView;
2. 泛型
通过使用泛型, 我们可以非常容易地获取其中的元素,并访问其特有的属性和方法, 一般使用在集合中使用(例如:数组,字典), 当方法调用的时候才有效果, 我们来看看如何使用:
//属性使用
@property (nonatomic, strong) NSMutableArray *testArrayM;
//在方法中使用
- (NSArray *)testStringArray:(NSArray *)stringArray;
我们在数组中使用泛型, 之后我们可以很明确知道数组中是什么类型如下图:
在方法中使用泛型.png
在NSMutableArray中使用泛型.png
并且在上图我们可以了解到, 在集合里规定对象的类型, 通过集合取出来的对象可以当做泛型来使用, 并且可以直接用点语法, 可想而知泛型的好处是非常强大的!
协变/逆变
__covariant: 协变, 用于数据强制转换类型(子类可以转变父类)
__contravariant :逆变, 用于数据强制转换类型(父类可以转变子类)
3. __kindof
表示当前类, 或者它的子类(__kindof使用: 放在类型前面, 表示修饰此类型)
我们先从 id 开始说起
最开始我们方法的返回值不确定,我们会使用 id 但是使用它会有不好之处, id在编译的时候不能检查真实类型, 并且返回值没有提示
- (id)testStringArray:(NSArray *)stringArray;
返回值使用id没有提示.png
所以苹果出现了 instancetype 它会自动识别当前对象是哪个类, 只能在返回值中使用, 但是在调用方法时候还是不知道返回什么类型
- (instancetype)testStringArray:(NSArray *)stringArray;
instancetype在编译能自动识别类型.png
最后苹果推出了 __kindof 它在调用时候很清楚的知道返回的类型, 在我们之前很多地方需要强制类型转换, 有了它就方便了很多
- (__kindof NSArray *)testStringArray:(NSArray *)stringArray;
__kindof使用.png
iOS 9 关键字的简单使用的更多相关文章
- iOS开发网络篇—简单介绍ASI框架的使用
iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...
- iOS开发UI篇—简单的浏览器查看程序
iOS开发UI篇—简单的浏览器查看程序 一.程序实现要求 1.要求 2. 界面分析 (1) 需要读取或修改属性的控件需要设置属性 序号标签 图片 图片描述 左边按钮 右边按钮 (2) 需要监听响应事件 ...
- iOS开发UI篇—简单介绍静态单元格的使用
iOS开发UI篇—简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...
- iOS开发Swift篇—简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- 李洪强iOS开发之- 实现简单的弹窗
李洪强iOS开发之- 实现简单的弹窗 实现的效果: 112222222222223333333333333333
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
- iOS CoreImage之滤镜简单使用
代码地址如下:http://www.demodashi.com/demo/11605.html 老骥伏枥,志在千里 前记 最近一直在研究图像处理方面,既上一篇iOS Quart2D绘图之UIImage ...
- iOS 面试大全从简单到复杂(简单篇)
1.UIWindow和UIView和 CALayer 的联系和区别? 答:UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应 ...
- iOS Property 关键字的使用
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全 ...
随机推荐
- python的random函数
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- PS字体工具字体显示不出来
显示一个小点:搜索了各种答案,扩大字号(最大72)更改前景色和背景色,最正确的解释就是分辨率太低,我发现分辨率是1,一般的设置成300,1分辨率情况下可以在图层那选择文字图层,然后按ctrl+t,拉大 ...
- Gabor变换
Gabor变换 Gabor变换属于加窗傅立叶变换,Gabor函数可以在频域不同尺度.不同方向上提取相关的特征.另外Gabor函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取得了较好的效果.Gab ...
- ACM俱乐部算法基础练习赛(1)
A: 水题 代码: #include<cstdio> #include<algorithm> using namespace std; ]; int n,m,c; int ma ...
- java service
http://www.regexlab.com/zh/jar2exe/demo1.htm http://www.zhangxinxu.com/wordpress/?p=1058 http://www. ...
- xHtml+css学习笔记
第一节 xHTML规范 *文档方面 -必须定义文档类型(DTD)和名字控件 *标签方面 -所有标签均要小写.关闭.合理嵌套.ID不能重复 -标签属性药有值,属性值要加印号且不能为空 -图片一定要加上a ...
- hdu4435 charge-station(先建后拆+bfs)
charge-station Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 一种Android换肤机制的实现
http://eastmoneyandroid.github.io/2016/01/22/android-reskin/
- 33个优秀的HTML5应用演示 (转)
33个优秀的HTML5应用演示 (转) HTML5能做什么?取代Flash?制作动画?开发程序应用?这些都只是HTML5的一小部分功能而已. 大家可能听到很多关于Flash是否会被HTML5取代的讨论 ...
- 面向中国 Azure 开发者发布开源解决方案指南
发布于 2014-05-23 作者 刘 天栋 Azure 是一个开放.灵活的云平台,可支持大量且不断增长的开源应用程序.框架和语言.微软及微软开放技术通过与全球及中国本地的开源社区不懈地合作,将 ...