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

ObjectiveC:if(obj){...} AND if(obj!= nil){...},哪个更好?

在这个问题中,我们比较了两种Objective-C语言中的条件判断语句。第一个语句是if(obj){...},第二个语句是if(obj!= nil){...}

第一个语句if(obj){...}的意思是,如果obj的值为非零(true),则执行大括号内的代码。这个语句的问题在于,它不能明确地判断obj是否为nil。在Objective-C中,nil是一个表示空指针的特殊常量,表示对象不存在。因此,当objnil时,这个语句可能会导致未定义的行为。

第二个语句if(obj!= nil){...}的意思是,如果obj的值不等于nil,则执行大括号内的代码。这个语句更好,因为它明确地检查了obj是否为nil。在Objective-C中,使用nil进行条件判断是一种常见的做法,因为它可以确保安全地处理对象。

总之,第二个语句if(obj!= nil){...}更好,因为它能够明确地检查obj是否为nil,从而避免潜在的问题。

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

相关·内容

  • 【IOS】IOS开发问题解决方法索引(三)

    :i]; NSLog(@"item:%@",item); } ※用 ObjectiveC 调用 JavaScriptfunction 要用 Objective-C 调用网页中的 JS function...]; ※用 JavaScript 存取 ObjectiveC 的 Value 要让网页中的 JS 程序可以调用 Objective-C 对象,方法是把某个 Objective-C 对象注册成 JS 中...JS 传 Array 到 Objective-C 时,还需要特别做些处理才能变成 NSArray,从 Obj C 传一个 NSArray 到 JS 时,会自动变成 JS Array。...※ 用 JavaScript 调用 ObjectiveC method Objective-C 的语法沿袭自 SmallTalk,Objective-C 的 selector,与 JS 的 function...12 对象nil状态的使用 若一个对象需要重复使用,即alloc 后会release,那么在release后,最好将其置为nil,才能利用是否等于nil来判断对象状态。

    90220

    iOS底层 - @synchronized(上)

    在探究之前首先找到objc_sync_enter和objc_sync_exit方法是属于哪个源码库,给objc_sync_enter和objc_sync_exit下符号断点。...result; } (滑动显示更多) 首先判断obj是否为nil,注意obj是id类型,id是对象指针类型objc_object* 如果obj有值走加锁的流程 如果obj = nil根据注释@synchronized...相当于 define BREAKPOINT_FUNCTION(prototype)中的prototype,而prototype的实现就是啥也没做,简单理解就是如果obj = nil相当于没加锁。...总结: objc_sync_enter方法是加锁的过程,如果obj参数不为nil就走加锁流程,否则相当于没有加锁 objc_sync_exit探究 在Objc源码库中全局搜索 objc_sync_exit...objc_sync_exit方法就是解锁功能,如果obj= nil 什么也不做 总结: objc_sync_enter方法作用是任务开始时进行加锁操作,而objc_sync_exit方法作用是在任务结束时进行解锁操作

    52940

    多线程安全-iOS开发注意咯!!!

    正式因为多线程能够在时间片里被CPU快速切换,造就了以下优势 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 但是并不是非常完美,因为多线程常常伴有资源抢夺的问题,作为一个高级开发人员并发编程那是必须要的...0x600003f94240>{number = 7, name = (null)} 互斥量 互斥量(Mutex)又叫互斥锁和二元信号量很类似,但和信号量不同的是,信号量在整个系统可以被任意线程获取并释放;也就是说哪个线程锁的...,要哪个线程释放锁。...) does nothing if (DebugNilSync) { _objc_inform("NIL SYNC DEBUG: @synchronized(nil); set a breakpoint...on objc_sync_nil to debug"); } objc_sync_nil(); } done: return result; } 从上面的源码中我们可以得出你调用

    41940

    多线程安全-iOS开发注意咯!!!

    [1240] 正式因为多线程能够在时间片里被CPU快速切换,造就了以下优势 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 但是并不是非常完美,因为多线程常常伴有资源抢夺的问题,作为一个高级开发人员并发编程那是必须要的...0x600003f94240>{number = 7, name = (null)} 复制代码 互斥量 互斥量(Mutex)又叫互斥锁和二元信号量很类似,但和信号量不同的是,信号量在整个系统可以被任意线程获取并释放;也就是说哪个线程锁的...,要哪个线程释放锁。...) does nothing if (DebugNilSync) { _objc_inform("NIL SYNC DEBUG: @synchronized(nil); set a breakpoint...on objc_sync_nil to debug"); } objc_sync_nil(); } done: return result; } 复制代码 从上面的源码中我们可以得出你调用

    87220

    iOS Category 添加属性实现原理 - 关联对象

    缺点2:改变第二个对象会影响到第一个对象的属性的值 NSObject *obj1 = [[NSObject alloc] init]; obj1.height = 10; NSLog(@"obj1...:%i",obj1.height); // 打印结果10 NSObject *obj2 = [[NSObject alloc] init]; obj2.height = 120; NSLog...(@"obj1:%i",obj1.height); // 打印结果120 NSLog(@"obj2:%i",obj2.height); // 打印结果120 方法二:使用字典保存对象对应的value...objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy); 参数一:id object : 给哪个对象添加属性.../ 指定相关的对象被复制,原子性 }; 获得属性方法:objc_getAssociatedObject(id object, const void *key); 参数一:id object : 获取哪个对象里面的关联的属性

    3.2K40
    领券