首页 > 其他分享 >OC 中 nullable、__nullable、_Nullable 的区别

OC 中 nullable、__nullable、_Nullable 的区别

时间:2024-01-24 17:00:59浏览次数:27  
标签:__ nil Nullable nullable NSString 注解

在 Objective-C 中,nullable__nullable_Nullable 都是用来表示一个对象可以是 nil 的注解。它们在不同的上下文中使用,但本质上具有相同的意义。这些注解主要用于与 Swift 互操作时提供更清晰的 API,并帮助开发者更好地处理 nil 值。以下是它们各自的使用情况和区别:

nullable

nullable 是在 Xcode 7 和更高版本中引入的,用于属性、方法参数和返回类型的注解,表明该值可以为 nil。这个注解是在头文件中使用,通常在属性、方法参数和返回类型的前面。例如:

@property (nonatomic, nullable) NSString *optionalString;

- (nullable NSString *)methodThatReturnsNullableString;
- (void)methodThatTakesNullableString:(nullable NSString *)string;

__nullable

__nullablenullable 的低级别等价物,它在 nullable 出现之前就存在了。虽然 nullable 更推荐用于头文件和公共 API,但 __nullable 仍然可以在实现文件中使用。例如:

- (void)methodWithNullableParam:(NSString * __nullable)param;

_Nullable

_Nullable 是在属性、方法参数和返回类型中用于指针类型的注解。通常,这是在声明 C 函数或者 C 类型的指针时使用。例如:

void functionWithNullableParam(NSString * _Nullable param);

总结

虽然 nullable__nullable_Nullable 在不同的情况下使用,但它们都传达了同样的信息:相关的对象或值可以为 nil。在现代 Objective-C 开发中,推荐使用 nullable,因为它提供了更清晰和一致的语法。然而,了解这些注解的等价物也有助于在阅读或维护老旧代码时更好地理解它们的含义。

标签:__,nil,Nullable,nullable,NSString,注解
From: https://blog.51cto.com/u_13188203/9400207

相关文章

  • 什么是UKCA认证 UKCA认证办理
    2021年1月1日,英国的脱欧进程就正式完成了。出口到英国的有关货物将不再适用CE标识,英国政府新推出了UKCA认证。产品销售到英国必须加贴UKCA标志!UKCA在哪些地区适用呢?是否英国都用UKCA呢?在2021年1月1日之前已投放到英国市场的产品,企业有一年的过渡时间来适应新的要求,期间仍然可以使......
  • date
    date显示或设置系统时间与日期概要date[OPTION]...[+FORMAT]date[-u|--utc|--universal][MMDDhhmm[[CC]YY][.ss]]主要用途转换时间到选定的格式,默认为当前。设置系统时间。参数format:输出的时间格式。format可用的转义序列如下:%%百分号%a当地缩写......
  • Python - “人生苦短,我用Python”
      字符串的三种定义方式1、单引号定义法:name='人生苦短,我用Python'2、双引号定义法:name="人生苦短,我用Python"3、三引号定义法:name="""人生苦短,我用Python"""三引号定义法,和多行注释的写法一样,同样支持换行操作。使用变量接收它,它就是字符串;不使用变量接收它,就......
  • BeautifulSoup和Cheerio库:解析QQ音频文件的完整教程
    在当今数字化的世界中,网络上充斥着各种各样的数据,而这些数据往往以各种不同的格式和结构存在。要从这些数据中获取有用的信息,我们就需要使用一些工具来解析和提取数据。BeautifulSoup和CheerioBeautifulSoup是Python中用于解析HTML和XML文档的库,而Cheerio是Node.js中类似的库。......
  • TPLINK路由器重启脚本(软件版本3.0.0)
    ​ 家中的两个路由器全都是TPLink路由器,由于总出现时间一长就网卡的原因,写了这个重启脚本在每天凌晨五点的时候对路由器进行自动重启使用方法:​ self.logindata的值为登录时的json数据​ 打开F12控制台,复制登陆的json数据包并填入self.logindataimportrequestsfromdatet......
  • 获取DataTable值
    1.根据列类型以及列名,取出dataTable某列所有的值//验证通过DataTabledt=Pub.mDB_MES.ExcuteForTable(querySQL);//(fromdindt.AsEnumerable()selectd.Field<int>("ID")).ToList();参......
  • C++ STL Template Traits 技术
    C++的traits技术,是一种约定俗称的技术方案,用来为同一类数据(包括自定义数据类型和内置数据类型)提供统一的类型名(traits),这样可以统一的操作函数,例如advance(),swap(),encode()/decode()等。问题描述首先来看traits技术可以解决什么问题,我们拥有自定义类型Foo,Bar,以及编译......
  • 测试开发高薪私教线下班手把手带你提升职业技能
    测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供1v1私教指导,BAT级别的测试管理大咖量身打造职业规划。管理学大师彼得·德鲁克......
  • WPF UI线程卡顿的一些理解
    WPFMVVM模型中线程分为UI线程(主线程)和其他线程(新建的线程)UI线程主要工作:1、负责响应外部的输入事件2、负责渲染UI界面,包括绘图、动画等其他线程:1、负责进行数据采集处理2、负责进行消息的分发 实际的工作中我们要合理使用线程,特别是大量的数据展示,图表动画渲染。不然很......
  • 配置日志文件达到一定大小自动压缩
    1工具的安装apt-getinstalllogrotate2修改配置文件在/etc/logrotate.d目录下创建一个新的logrotate的配置文件,touch myapp.conf在该配置文件中添加以下内容:/path/to/your/logfile{size10M#设置日志文件最大大小为10MBrotate5#保存5份日志文件comp......