1.属性nonnull \__nonnull 修饰时:该属性的setter和 getter都不能为nil
例如:
@property (nonatomic,strong,nonnull)NSArray *names;
@property (nonatomic,strong) NSArray *__nonnull names;
默认情况下,不加nullable, setter和 getter 都是可以为nil
nullable更多的作用在于程序员之间的沟通交流(提醒同事某个属性可能是nil)
例如:
@property (nonatomic,strong,nullable) NSArray *names;
@property (nonatomic,strong)NSArray *__nullable names;
3.属性null_resettable修饰时 : setter可以为nil, getter不可以为nil
@property (null_resettable, nonatomic, strong) NSArray *names;
4.如果
设置@interfaceViewController ()
@end 之间的所有属性默认都是nonnull,可以添加 NS_ASSUME_NONNULL_BEGIN 与NS_ASSUME_NONNULL_END描述。
例如:
NS_ASSUME_NONNULL_BEGIN
@interface ViewController ()
@end
NS_ASSUME_NONNULL_END
5.方法返回值中添加__kindof修饰,这样可以解决当返回值用子类接收时,不用强制转换处理。
例如:
// __kindof : 告诉编译器返回值可能是NSString,也可能是NSMutableString
+ (__kindof NSString *)dequeueXXX;
NSString *str = [self dequeueXXX];
[str length];
NSMutableString *str2 = [self dequeueXXX];
[str2 length];