NS_ASSUME_NONNULL_BEGIN & NS_ASSUME_NONNULL_END
從表面意思來看滞造,NS設(shè)定不可為空開始 & NS設(shè)定不可為空結(jié)束
蘋果提供的兩個宏潭袱,方便我們在定義屬性的時候?qū)⒉豢蔀榭盏膶傩远紝懺?“NS設(shè)定不可為空開始” 和 “NS設(shè)定不可為空結(jié)束”之間磨确,默認(rèn)寫在這之間的屬性是不可為空的推掸。
所有簡單指針都被假定設(shè)為非空(nonnull),因此我們只需要去指定那些可為空的(nullable)的指針桶蝎,這樣不用麻煩的去將每個屬性或方法都去指定nonnull和nullable,減輕了開發(fā)的工作量谅畅。
在Xcode升級到10.0 beta4版本后登渣,創(chuàng)建類時系統(tǒng)自動會添加這兩個宏:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nullable ,nonatomic, assign) int age;
@end
NS_ASSUME_NONNULL_END
其中NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END在Xcode10.0 beat4版本自動添加。
name 不可為空
age 可為空
創(chuàng)建person對象毡泻,給屬性賦值:
Person *p = [[Person alloc] init];
p.name = nil;
p.age = nil;
給name給空胜茧,系統(tǒng)會提醒: