NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END

2023-11-23 14:58
文章标签 end begin ns assume nonnull

本文主要是介绍NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

         NS_ASSUME_NONNULL_BEGIN

   ... 

   NS_ASSUME_NONNULL_END

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

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

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

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

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


这篇关于NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418722

相关文章

阅读笔记--Guiding Attention in End-to-End Driving Models

作者:Diego Porres1, Yi Xiao1, Gabriel Villalonga1, Alexandre Levy1, Antonio M. L ́ opez1,2 出版时间:arXiv:2405.00242v1 [cs.CV] 30 Apr 2024 这篇论文研究了如何引导基于视觉的端到端自动驾驶模型的注意力,以提高它们的驾驶质量和获得更直观的激活图。 摘 要   介绍

vector迭代器的begin()和end()

参考博客:http://blog.csdn.net/kjing/article/details/6936325 迭代器和反向迭代器使用时: end()永远指向最后一个元素的下一个位置; 若容器为空时,迭代器的begin()和end()指向位置相同,而后即使再给容器赋值,迭代器的begin()指向,仍然为空。 错误范例: #include <iostream> #include <v

Linux C/C++ 库链接选项 --whole-archive,--no-whole-archive和--start-group, --end-group

库链接选项 一、介绍whole-archive编译选项Bstatic编译选项start-group 编译选项 示例参考链接 一、介绍   这四个都是链接器的选项,所以在编译的时候要用-Wl,[options]来传递给链接器,不然编译器会不认得这个选项。   在大型工程开发中,工程目录会分的非常细,在modules下会创建很多模块,每个modules都会编译成.a静态库文件供主

在写引导页面时,出现Application windows are expected to have a root view controller at the end of application

在写引导页面时,出现Application windows are expected to have a root view controller at the end of application 的崩溃问题,只要添加一句 self.window.rootViewController=[[UIViewController alloc] init];即可

End-to-End视觉里程计新突破:从运动模糊图像中精确估计相机姿态

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:MBRVO: A Blur Robust Visual Odometry Based on Motion Blurred Artifact Prior 作者:Jialu Zhang, Jituo Li*, Jiaqi Li, Yue Sun, Xinqi Liu, Zhi Zheng, and Guodong Lu

【论文阅读】YOLOv10: Real-Time End-to-End Object Detection

文章目录 摘要一、介绍二、相关工作三、方法3.1无nms培训的一致性双重任务3.2 整体效率-精度驱动的模型设计 四、实验4.1实现细节4.2与最先进水平的比较4.3模型分析 五、结论 YOLOv10:实时端到端对象检测 摘要 在过去的几年里,由于在计算成本和检测性能之间取得了有效的平衡,YOLOs已经成为实时目标检测领域的主导范式。研究人员已经对yolo的架构设计、优化目

jedis connection exception unexpected end of stream

jedis connection exception unexpected end of stream 多线程的时候,我的代码起初是这样子的: ExecutorService pool = Executors.newFixedThreadPool(100); // 线程池100Jedis jedis = jedisPool.getResource();for (int i = 0; i <

关于#ifndef,#define,#end的说明

#ifndef,#define,#end 是宏定义的一种---条件编译 这样我直接举个例子好了:我定义两个相同的类A分别在single.h和singlenew.h    single.h: 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 A() 8

(LeetCode)Remove Nth Node From End of List --- 从后去除列表中指定元素结点

Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and

Sql语句-case when then else end

根据上面的表信息输出下面的结果: 下面是建库和表结构据: create table DeptSales(deptID int,SubjMonth int ,sales int ,deptname varchar(50)) insert into deptsales (deptid ,subjmonth,sales) values (1,1,55);insert