NS_ASSUME_NONNULL_BEGIN

本文深入探讨了NS_ASSUME_NONNULL_BEGIN与NS_ASSUME_NONNULL_END宏的作用,它们简化了Objective-C中指针nullability的管理,减轻了开发者标记nonnull和nullable的负担。文章强调了苹果制定的安全规则,包括typedef定义类型nullability的上下文依赖性、复杂指针类型的显式标记要求,以及常见的NSError**的默认nullability特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//最近看到这样一组宏定义,有了如下理解:

NS_ASSUME_NONNULL_BEGIN

...

NS_ASSUME_NONNULL_END

一、在这两个宏之间的代码,所有简单指针都被假定设为非空(nonnull),因此我们只需要去指定那些可为空的(nullable)的指针,这样不用麻烦的去将每个属性或方法都去指定nonnull和nullable,减轻了开发的工作量。

二、为了安全起见,苹果还制定了几条规则:

1.typedef定义的类型的nullability(typeof(COREVIDEO_DECLARE_NULLABILITY))特性通常依赖于上下文,即使是在Nonnull组成的这两个宏定义区域设置中,也不能假定它为nonnull。

2.复杂的指针类型(如id *)必须显示去指定是nonnull还是nullable。例如,指定一个指向nullable对象的nonnull指针,可以使用”__nullable id * __nonnull”。

3.我们经常使用的NSError **通常是被假定为一个指向可为空的nullable NSError对象的nullable指针。



 

#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSInteger, HSAddressType) { HSAddressTypeProvince, // 省 HSAddressTypeCity, // 市 HSAddressTypeDistrict, // 区 }; @interface HSAddressViewModel : NSObject // 外部传进来的数据 @property (nonatomic, strong) NSDictionary *params; @property(nonatomic,assign)BOOL showProvince; @property(nonatomic,assign)BOOL showCity; @property(nonatomic,assign)BOOL showArea; // 是否展示搜索框 @property (nonatomic, assign) BOOL isShowSearch; @property (nonatomic, strong) NSArray *currentData; @property (nonatomic, assign) HSAddressType currentType; // 选择的好的数据 @property (nonatomic, strong) NSDictionary *selectData; @property (nonatomic, copy) NSString *_Nullable provinceStr; @property (nonatomic, copy) NSString *_Nullable cityStr; @property (nonatomic, copy) NSString *_Nullable districtStr; // 当前选择的省市区全部数据 @property (nonatomic, strong) NSArray *allProvinceArray; @property (nonatomic, strong) NSArray *cityArray; @property (nonatomic, strong) NSArray *districtArray; // 准备数据 - (void)getAllProvinceDataWithComplete:(void(^)(BOOL result))complete; // 获取省对应的城市数据 - (void)getCityDataByProvinceMap:(NSDictionary *)provenceDic Complete:(void(^)(BOOL result))complete; // 获取市对应的区数据 - (void)getDistrictDataByCityMap:(NSDictionary *)cityDic Complete:(void(^)(BOOL result))complete; - (void)setDistrictDataWithDistrictMap:(NSDictionary *)districtDic Complete:(void(^)(BOOL result))complete; // 切换按钮数据 - (void)changeCurrentType:(HSAddressType)type; // 设置原始数据 - (void)setOriginData; // 设置搜索数据 - (void)setSelectDataWithSearchString:(NSString *)searchStr; @end NS_ASSUME_NONNULL_END将上述IOS代码翻译成对应的鸿蒙代码
最新发布
07-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值