首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objective C中如何在某些情况下使用nonnull

在Objective C中,可以使用nonnull关键字来标记方法参数、返回值、属性或者局部变量,以确保它们不为nil。

在某些情况下,我们可能需要在方法参数中使用nonnull来表示该参数不能为空。这样做的好处是可以在编译时检查参数是否为nil,避免在运行时出现空指针异常。

下面是在Objective C中如何在某些情况下使用nonnull的示例:

  1. 在方法参数中使用nonnull:
代码语言:txt
复制
- (void)doSomethingWithNonNullParameter:(nonnull NSString *)param {
    // 在这里可以放心地使用param,因为它不会为nil
}
  1. 在返回值中使用nonnull:
代码语言:txt
复制
- (nonnull NSString *)getNonNullString {
    NSString *str = @"非空字符串";
    return str;
}
  1. 在属性中使用nonnull:
代码语言:txt
复制
@property (nonatomic, nonnull) NSString *nonNullProperty;
  1. 在局部变量中使用nonnull:
代码语言:txt
复制
- (void)someMethod {
    nonnull NSString *nonNullString = @"非空字符串";
    // 在这里可以放心地使用nonNullString,因为它不会为nil
}

nonnull关键字的使用可以提高代码的健壮性和可读性,同时也可以帮助开发者更早地发现潜在的空指针问题。

对于在腾讯云上使用Objective C进行开发的场景,可以参考腾讯云移动开发平台(https://cloud.tencent.com/product/mpp)提供的相关产品和服务,如移动推送、移动分析、移动测试等,以满足移动应用开发的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#ref和out具体怎么使用什么情况下使用?

使用ref前必须对变量赋值,out不用。   out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。   ...//y = x;   //上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行   x = 1;   y = 2;  }  static void refTest...x, ref int y)  {   x = 1;   y = x;  }  public static void Main()  {   //out test   int a,b;   //out使用前...,变量可以不赋值   outTest(out a, out b);   Console.WriteLine("a={0};b={1}",a,b);   int c=11,d=22;   outTest(...out c, out d);   Console.WriteLine("c={0};d={1}",c,d);   //ref test   int m,n;   //refTest(ref m, ref

2.7K10

OC - 属性关键字和所有权修饰符

这些关键字可以用于属性、方法返回值和参数,来指定对象的可空性,这样编写代码的时候就会智能提示。 Swift 可以使用!和?...而在 Objective-C 则没有这一区分,button即可表示这个对象是optional,也可表示是non-optioanl。...这样就会造成一个问题: Swift 与 Objective-C 混编时,Swift 编译器并不知道一个 Objective-C 对象到底是optional还是non-optional,因此这种情况下编译器会隐式地将...为了安全起见,苹果还制定了以下几条规则: typedef类型的的可空性通常依赖于上下文,即使 Audited Regions 也不能假定它为nonnull; 对于复杂的指针类型(id *)必须明确指定它的可空性...__autoreleasing MRC 我们可以给对象发生 autorelease 消息来将它注册到 autoreleasepool ,而在 ARC 我们可以使用 __autoreleasing

1.3K31

iOS_OC API 指定可空性

1、限定符 OC可空限定符 Swift 含义 nullable、_Nullable、__nullable optional(:String?)...未指定值是否为nil(除非建其作为过度工具,否则应避免使用) null_resettable 隐式optional(:String!) 用于属性。1、setter可以传入nil,将值重置为默认值。...但其getter永远不会返回nil,会提供一个默认值;2、必须重写setter或getter做非空处理 使用场景: 属性:推荐使用非下划线关键字,例如 nonnull 、 nullable、null_resettable...其他场景:推荐使用 _Nullable 和 _Nonnull 关键字。 任何场景:都不推荐使用 __nullable 和 __nonnull。...而可空的指针类型需要手动制定,address。 参考: iOS 混编|为 Objective-C API 指定可空性

42620

Objective-C RunTime概览

简单点理解,Runtime就是一个C和汇编写的代码库——是Objective-C之所以成为Objective-C的一个库。 用一图以助理解: ?...SEL 定义objc.h第49、50行,表示一个方法选择器(可以简单点,理解为方法名,一个C语言的字符串)。...; 表示Objective-C的属性。...在这里就可以使用Method Swizzling,「动态地」官方的基础上增加一些代码,以实现需求。 需要新建一个UIViewController的Category,load方法实现互换。...不过: Objective-C的Runtime就像一把双刃剑,使用它,风险高,回报也高。它赋予你很大的权力,但只要你犯了哪怕一丁点儿错误,都有可能让程序挂掉。 所以,总原则:能不用,尽量不用。

62530

慎用公共变量

前言 开发过程,避免不了会使用公共变量,记录共享对象状态、数据最简单的方式就是创建创建公共变量; 当业务逻辑变多,还采用这种思想就会变得危险,代码逻辑变得不清晰,慢慢就有一种代码坏味道。...出现问题,解决问题,Objective-C针对上述问题,提供了一个解决方案:即使用关联对象(Associated Object); 我们可以把关联对象想象成一个Objective-C对象(字典),这个对象通过给定的...key连接到类的一个实例上; 不过由于使用的是C接口,所以key是一个void指针(const void *)。...函数将key指定的关联对象设置为nil; 举个栗子 开发工程,给UIView添加单击手势是非常常见的需求。...)object; Key,使用的时候只需要传入NSString类的参数就可以了,不需要const void * _Nonnull key,接口方法变得更优雅简洁一些。

55520

iOS引用转换:Foundation与Core Foundation对象互相转换(__CFString转NSString,void *转id等等)

Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组,字典和集合,其他功能包括处理日期和时间、内存管理、处理文件系统、存储(或归档)对象、处理几何数据结构(点和长方形...C语言编写的Core Foundation 框架,并使用引用计数的对象。...ARC无效时,Core Foundation 框架的retain/release 分别是 CFRetain /CFRelease。...所谓的Toll-free bridging是说您可以某个框架的方法或函数同时使用 Core Foundation 和 Foundation 框架某些类型。...ARC,CF和OC之间的转化桥梁是 __bridge,有3种方式: __bridge 只做类型转换,不改变对象所有权,是我们最常用的转换符。

2.1K40

Objective-c 知识总结 -- @property

Objective-C 2.0 属性的概念 ? OC 的属性概念 3. 属性声明的构成 ?...字符串 * * @note 关于特征字符串的格式Objective-C Runtime Programming Guide》 Declared Properties 一节有描述...不过这么做编译器会报错,但是只要新建一个该类的类别,类别.h文件写上原始类该方法的声明,类别.m文件什么也不写,就可以正常调用私有方法了。这就是传说中的私有方法前向引用。...—— 来自文章《类别(Category)的作用(二)---对私有方法的前向引用》 ---- 五、参考书籍、文章 《 Objective-C 编程全解 》第3版 《Objective-C Runtime...也有小改进--Objective-C的类属性》 《iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)》 《ObjectiveC

1.3K31

iOS_Objective-C编程规范

gtm_myCategoryMethodOnAString: 2.3 【必须】文件名 文件的扩展名及其意义如下: .h C/C++/Objective-C 的头文件 .m Objective-C...实现文件 .mm Objective-C++实现文件 .hpp C++头文件 .cpp 纯 C++的实现文件 .cC 的实现文件 2.4 【推荐】缩略词和首字母缩写词 alloc:分配、...函数的边界(参数的要求、返回值的范围、是否返回为空)要在注释写明,且代码明确检查,包括断言及if判断。...4.5 【必须】使用轻量级泛型来记录容器的类型 // 使用 Xcode 7 及以上版本的所有项目都应该使用 Objective-C 轻量级泛型表示法来表明容器包含的对象。...建议界面布局时使用相对布局,例如: 使用目标view父view的相对位置 使用目标view与相关view的相对位置 使用目标view与相邻view的相对位置 当访问一个 CGRect 的

64520

ObjectiveC语言的新魅力——Nullability、泛型集合与类型延拓

ObjectiveC语言的新魅力 一、引言         Xcode7,iOS9的SDK已经全面兼容了Objective-C的一些新特性和新功能。...注意: 这一特性Xcode6.3就已经支持,但在Xcode7又做了一些写法上的小改动,例如,Xcode6.3这样写: -(void)setValue:( nonnull NSNumber *  ...:set方法可以为nil,get方法不可返回nil 一点提示: 你可以发现,iOS9的SDK已经完全兼容使用了这些特性,并且nonnull使用会比nullable广泛的多,因此,系统提供了这样一对宏...开发时如下使用,做到提示伙伴我这个数组是什么东西的作用: @interface ViewController () {     NSArray __TYPE__FIT_TO__CLASS(NSString...激动吧,使用点语法可以访问到数组泛型的方法了,还有更加诱人的: ? 我们向这个数组追加元素的时候,编译器将元素的类型提示了出来,并且将FromArray方法需要的元素类型也提示了出来。

97930

defer in C++Objc

Objective-CC++来说,苹果并没有帮我们定义,因此本文总结一下如何在C++和Objective-C实现defer。...defer with cleanup __attribute__ 想要在Objective-C完美实现defer,那么我们需要了解一下GNU C的编译指令__attribute__((attribute-list...虽然上面的代码已经可以基本实现我们的需求,但是假如每次使用都要敲上面这么长的声明变量语句,怕是很难记住,因此,参考Reactive Cocoa神奇的@onExit宏,我们可以定义以下的宏: #define...defer VS return 使用defer过程,我们需要注意一点,假如我们defer修改函数的返回值,那么很抱歉,这是没有意义的事情,就好比下列代码: int test { int...参考资料 黑魔法_attribute_((cleanup)) 使用 C/C++ 模拟 defer 关键字

98620

慎用公共变量~~

开发过程,避免不了会使用公共变量,记录共享对象状态、数据最简单的方式就是创建创建公共变量。 当业务逻辑变多,还采用这种思想就会变得危险,代码逻辑变得不清晰,慢慢就有一种代码坏味道。...出现问题解决问题,Objective-C针对上述问题,提供了一个解决方案:即关联对象(Associated Object)。...我们可以把关联对象想象成一个Objective-C对象(字典),这个对象通过给定的key连接到类的一个实例上。不过由于使用的是C接口,所以key是一个void指针(const void *)。...另外,如果我们使用同一个key来关联另外一个对象时,也会自动释放之前关联的对象,这种情况下,先前的关联对象会被妥善地处理掉,并且新的对象会使用它的内存。...4、举个栗子: 开发工程,给UIView添加单击手势是非常常见的需求。假定,现在我们就要动态地将一个Tap手势操作连接到任何UIView,并且根据需要指定点击后的实际操作。

75640

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

库函数的直接调用 1.2 各种基本概念的C表达 Objective-C ,类、对象和方法都是一个 C 的结构体,从 objc/objc.h(对象,objc_object,id)以及objc/runtime.h...实际使用,这个对象只有一部分方法是常用的,很多方法其实很少用或者根本用不上。这种情况下,如果每次消息来时,我们都是methodLists遍历一遍,性能势必很差。这时,cache就派上用场了。...Objective-C的类方法是使用元类的根本原因,因为其中存储着对应的类对象调用的方法即类方法。...具体这 objc_selector 结构体是什么取决与使用GNU的还是Apple的运行时, Mac OS XSEL其实被映射为一个C字符串,可以看作是方法的名字,它并不一个指向具体方法实现(IMP类型才是...方法查找过程Objective-C runtime使用这个字段来确定开始线性查找数组的索引位置。

1.3K40

iOS_Effective Objective-C 20 编写高质量iOS与OS X代码的52个有效方法

三读Objective-C2.0 笔记~(作为一个OC开发者,必读之书) gitbook地址 一、熟悉Objective-C 1、了解Objective-C语言的起源 ​ Objective-CC...Objective-CC的“超集”(superset),所以C语言中的所有功能在编写Objective-C代码时依然适用。因此必须同时掌握C与OC这两门语言的核心概念,方能写出高效的OC代码来。...没用崩溃的情况下,那块内存可能只复用了其中一部分,所以对象某些二进制数据依然有效。 ​ 还有一种可能,就是那块内存恰好为另外一个有效且存活的对象所占据。...要点: 块是CC++、Objective-C的词法闭包 块可接受参数,也可返回值 块可以分配在栈or堆上,也可以时全局的。...类所具备的某些功能,是CoreFoundation框架C语言数据结构所不具备的,反之亦然。

95840

使用Python编写iOS原生应用的框架设计思考(首篇) 原

熟悉原生开发的同学们都知道,对于可跨平台的原生框架,使用JS实现的占了大半,其原因是由于Apple内置了JavaScriptCore这样一个JS引擎,使得JavaScript与Objective-C的交互变得非常容易...二、iOS平台使用Python解释器       Github上有很多有趣的项目,其中有一个项目可以将Python源码编译成可以iOS平台运行的Framework,其地址如下: https://github.com...需要注意,对于Python.framework要更特殊一点,我们需要将其拷贝进工程的Bundle,以便后续使用。...三、编写桥接文件       这部分主要有Objective-C实现,用来启动Python引擎,加载Python业务代码的入口文件,做各种原生组件与Python组件的桥接等。...增加更多工具接口,网络,数据文件操作等。

1.8K30

iOS 小技能:Method Swizzling (交换方法的IMP)

不要在load里面取加载对象,因为我们再load调用的时候根本就不确定我们的对象是否已经初始化了,所以不要去做对象的初始化 I Method Swizzling基础 Objective-C的Runtime...,一个类是用一个名为objc_class的结构体表示的,它的定义如下 https://developer.apple.com/documentation/objectivec/objective-c_runtime...Objective-C调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。因此我们可以在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。...1.3 Method swizzling的时机 如果使用恰当,Method swizzling 还是很安全的,一个简单安全的方法是,仅在loadswizzle , dispatch_once 完成...Objective-C时执行。

1.5K10
领券