2013-05-19 73 views
3

考虑到下面的Objective-C例子,它仅仅是一种风格和易读性的问题,可以保留单独的语句或将它们捆绑在一起?是否有任何实际的好处?宣布单个变量是否浪费内存?将声明合并为一个声明还是不合并?

NSDictionary *theDict = [anObject methodToCreateDictionary]; 
NSArray *theValues = [theDict allValues]; 
NSString *theResult = [theArray componentsJoinedByString:@" "]; 

NSString *theResult = [[[anObject methodToCreateDictionary] theValues] componentsJoinedByString:@" "]; 

回答

2

我采取以下考虑,当我宣布一个独立的变量:

  • 如果我可能希望看到在调试器的价值。
  • 如果我正在访问变量不止一次。
  • 如果这条线太长。

然而,这两种方法之间没有实际的区别。

+0

感谢您的澄清。 – tomchkk

1

此外,你还没有被直接问这个,但是要知道,当你访问使用点符号的对象,例如:

myObject.myObjectProperty1.myObjectProperty1Property; 

如果你要访问一次myObjectProperty1Property多,它可以建议将其分配给本地命名变量。如果你不这样做,查找将会被执行多次。

现在我不能强调,对于许多情况(如果不是大多数情况下),这次节省是非常小的,以至于认真地质疑是否值得花时间为分配额外打字!那么,为什么我要提高呢?因为除了风格的“非凡”之外(我刚刚写了一个新单词) - 如果你正在编写的代码段正在紧密循环运行,那么值得特别注意。一个例子是编写代码时,它将单元填充到包含大量单元的UICollectionView中。此外,如果您使用的是核心数据,并且您正在使用点符号来引用NSManagedObject属性的属性,那么每次查找都会产生更大的开销,在这种情况下,更值得花时间先将“嵌套”点符号调用引用的任何值先分配给局部变量。

+0

感谢您的贡献。我明白了你的观点,但我想知道,在给定这种情况下,花时间为具有或不带点表示法的局部变量分配一个值是否是同样的事情? – tomchkk

+0

不,因为在目标C中,ivar通过对象消息传递进行访问。您可以定义任何iVar访问方法,以包含您喜欢的任何功能,并且编译器事先并不知道是否需要运行您的方法,因此在目标c中,点符号对应于嵌套方法调用,并使用ivar访问方法每个点。对于任何给定的代码,更少的点等于更少的消息。有人推测,对于某些代码模式,理论上这可以通过编译器进行优化。实际上,无论出于何种原因,似乎都不是。 – TheBasicMind