浅析nonnull和nullable


title: 浅析nonnull和nullable
date: 2016-11-17 14:59:50
categories:

  • iOS_SHAKALAKA
    tags:
  • iOS
  • nonnull
  • nullable

浅析nonnull和nullable

为了对应Swift中的optionalnon-optional,Xcode6.3推出了一个新特性,就是 nullablenonnull

简单来讲,nullable 表示对象可以是NULL或nil,nonnull 表示对象不可以为空,当我们不遵循上述规则时,编译器就会警告。

下面简单示范一下这两个东西的用法!

声明属性有两种写法。

第一种写法

@property (nonatomic, copy, nullalbe) NSString *name;
@property (nonatomic, strong, nonnull) UITableView *tableView;

第二种写法

@property (nonatomic, copy) NSString * __nullabel name;
@property (nonatomic, strong) UITableView * __nonnull tableView;

个人推荐第一种写法,简单清晰明了。

声明方法的参数也有两种写法

第一种写法:

- (instancetype)initWithName:(nonnull NSString *)name;
- (instancetype)initWithName:(nullable NSString *)name;

第二种写法:

- (instancetype)initWithName:(_Nonnull NSString *)name;
- (instancetype)initWithName:(_Nullable NSString *)name;

当然,试想一下如果每一个参数都需要指定 _nullable 或者 _nonnull,未免不是太麻烦了么!好在苹果给我们提供了一对宏定义: NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END

基本用法如下:

NS_ASSUME_NONNULL_BEGIN

@interface DemoVC_1 : UIViewController

//需要指定 nullable
@property (nonatomic, copy, nullable) NSString *name;

//NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END 之间,此处 ID 没有指定则默认为 nonnull
- (instancetype)initWithID:(NSString *)ID;

@end

NS_ASSUME_NONNULL_END

总结

其实很早以前就看见别人用这两个小玩意了,因为懒就没去仔细研究,导致一直没弄明白,今天又看见了,一脸尴尬。。优秀的开发者总是时刻追随技术最前沿,拥抱变化,接收新鲜事物,希望自己在以后的开发中能够亲身践行,加油!

博主原创,转载请注明出处,不胜感激

你可能感兴趣的:(浅析nonnull和nullable)