Objective-C中nil使用的最佳实践

没有必要将nil作为初始值赋给变量

NSString *myString = nil;

上面的代码与不带nil效果相同,所以让我们保持简洁:

NSString *myString;

属性的处理也是一样。记住nil与0等价,而后者与布尔值NO等价,所以也不需要像下面一样:

@property (nonatomic, assign) BOOL didLoad;

...

didLoad = NO;

设置初始值为NO是不必要的,因为所有变量的初始值都是nil所以didLoad的值已经是NO了。

委托(Delegate)

if (self.delegate) {

   if ([self.delegate respondsToSelector:@selector(@"didFinish")]) {

      [self.delegate didFinish];

   }

}

这段代码也能被简化,当delegate为nil时,nil只能够接收值为nil的消息,所以最外一层判断是不必要的,可以简化如下:

if ([self.delegate respondsToSelector:@selector(@"didFinish")]) {

   [self.delegate didFinish];

}

简化条件句

if (myObj == nil)

能够被简化为:

if (!myObj)

同时也注意避免使用!=:

if (myObj != nil)

它难以阅读,看看下面功能相同的代码是如何简单的:

if (myObj)

一串对象也能为nil

if (a.b.c)

上面的代码当a、b、c中任何一个为nil时,值为false,这样写完全ok,所以没必要写成下面那样:

if (a) 

   if (a.b) 

      if (a.b.c)

让本来为nil的东西保持nil

我注意到我以前写过很多这样的代码:将数组初始化为空数组@[],而不是让数组保持nil或者未初始化的状态。但事实上让它们保持nil没什么不好。如果你有一个值为nil的数组对象,你检查它的数量,和检查空数组的数量结果一样。下面的代码中,无论myArray为nil还是@[],条件判断的结果都为真。

if (myArray.count == 0)

时间: 2024-12-10 21:16:44

Objective-C中nil使用的最佳实践的相关文章

基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?

简单介绍: 说明: 在指定命名空间中计算参数字符串的有效表达式,并返回一个对象, Help on built-in function eval in module __builtin__: eval(...)     eval(source[, globals[, locals]]) -> value          Evaluate the source in the context of globals and locals.     The source may be a string 

Apache Kafka 在大型应用中的 20 项最佳实践

原标题:Kafka如何做到1秒处理1500万条消息? Apache Kafka 是一款流行的分布式数据流平台,它已经广泛地被诸如 New Relic(数据智能平台).Uber.Square(移动支付公司)等大型公司用来构建可扩展的.高吞吐量的.且高可靠的实时数据流系统. 例如,在 New Relic 的生产环境中,Kafka 群集每秒能够处理超过 1500 万条消息,而且其数据聚合率接近 1Tbps. 可见,Kafka 大幅简化了对于数据流的处理,因此它也获得了众多应用开发人员和数据管理专家的青

基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

常规导入: import module_name[,module1,...]  from module_name import [*|child[,child1,...] from module_name import [*|child[,child1,...] as alias_name 注意: 导入语句可出现在程序任意位置,自定义包要实现from module_name import *的效果则此模块必须在__init__.py实现__all__ = ['module_1', 'module

【转】Java中关于异常处理的十个最佳实践

原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们. 异常处理是书写强健Java应用的一个重要部分,它是关乎每个应用的一个非功能性需求,是为了优雅的处理任何错误状况,比如资源不可访问,非法输入,空输入等等.Java提供了几个异常处理特性,以try,catch和 finally 关键字的形式内建于语言自身之中

前端性能优化最佳实践

最佳实践1:使用DocumentFragments或innerHTML取代复杂的元素注入 DOM操作在浏览器上是要付税的.尽管性能提升是在浏览器,DOM很慢,如果你没有注意到,你可能会察觉浏览器运行非常的慢.这就是为什么减少创建集中的DOM节点以及快速注入是那么的重要了. 现在假设我们页面中有一个<ul>元素,调用AJAX获取JSON列表,然后使用JavaScript更新元素内容.通常,程序员会这么写: Javascript代码 var list = document.querySelecto

[转] ADO.NET 的最佳实践技巧

这是我很早以前看过的微软的一篇文章,最近,一些网友问的问题很多理论都在里面,所以,整理一下放在这里,大家可以参考一下. 简介 本文为您提供了在 Microsoft ADO.NET 应用程序中实现和获得最佳性能.可伸缩性以及功能的最佳解决方案:同时也讲述了使用 ADO.NET 中可用对象的最佳实践:并提出一些有助于优化 ADO.NET 应用程序设计的建议. 本文包含: • 有关 .NET 框架包含的 .NET 框架数据提供程序的信息. • DataSet 和 DataReader 之间的比较,以及

web移动开发最佳实践之 css篇

web移动开发最佳实践之 css篇 一.css概述 css即层叠样式表(Cascading Style Sheets),它的作用主要是控制页面元素的样式,包括布局.颜色.字体.字号.空白.边框.属性等等.css的出现使得html的内容和样式分离,极大的提高了工作效率. 目前最新的标准是css3,下面几节将介绍在使用css过程中应遵循的最佳实践方案. 二.使用高效的css选择器 欲创建一个高效的web应用,你要了解浏览器是如何读取你的web页面并呈现出来的.当浏览器读取你的html文档时,它首先对

web移动开发最佳实践之 css篇 ——转

 web移动开发最佳实践之 css篇 一.css概述 css即层叠样式表(Cascading Style Sheets),它的作用主要是控制页面元素的样式,包括布局.颜色.字体.字号.空白.边框.属性等等.css的出现使得html的内容和样式分离,极大的提高了工作效率. 目前最新的标准是css3,下面几节将介绍在使用css过程中应遵循的最佳实践方案. 二.使用高效的css选择器 欲创建一个高效的web应用,你要了解浏览器是如何读取你的web页面并呈现出来的.当浏览器读取你的html文档时,它首先

Java异常处理的10个最佳实践

本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.null 输入等等.Java 提供很多异常处理特性,通过内置的 try.catch.finally关键字实现.Java 同样允许创建新的异常和使用 throw 和 throws 抛出该异常.在实践中,异常处理不单单是知道语法这么简单.编写健壮的代码更像是一种艺术,而不是一门科学,在接