【问题标题】:Bundle declarations into one statement or not?是否将声明捆绑到一个语句中?
【发布时间】:2013-05-19 08:25:28
【问题描述】:

鉴于以下 Objective-C 示例,保留单独的语句或将它们捆绑在一起仅仅是样式和易于阅读的问题吗?两者都有实际好处吗?单独声明变量是不是很浪费内存?

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

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

【问题讨论】:

    标签: objective-c coding-style


    【解决方案1】:

    当我声明一个单独的变量时,我会考虑以下几点:

    • 如果我想在调试器中查看它的值。
    • 如果我多次访问该变量。
    • 如果行太长。

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

    【讨论】:

    • 感谢您的澄清。
    【解决方案2】:

    此外,您还没有直接询问过这个问题,但请注意,当您使用点符号访问对象时,例如:

    myObject.myObjectProperty1.myObjectProperty1Property; 
    

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

    现在我怎么强调都不为过,对于许多(如果不是大多数)情况来说,节省的时间是如此微不足道,以至于严重质疑是否值得花时间为作业进行额外的打字!那我为什么要提出这个?因为已经说过——除了风格上的“anality”(我刚刚编了一个新词)——如果你正在编写的代码部分在一个紧密的循环中运行,那么值得格外小心。一个例子是编写代码来填充包含大量单元格的 UICollectionView 中的单元格。此外,如果您使用 Core Data 并且使用点符号来引用 NSManagedObject 属性的属性,那么每次查找都会产生更大的开销,在这种情况下,更值得花时间首先将“嵌套”点表示法调用引用的任何值分配给局部变量。

    【讨论】:

    • 感谢您的贡献。我明白你的意思,但我想知道,在这种情况下,花时间为带有或不带点符号的局部变量赋值不是一回事吗?
    • 否,因为在目标 C ivar 中是通过对象消息传递访问的。您可以定义任何 iVar 访问方法以包含您喜欢的任何功能,并且编译器事先不知道您是否需要运行您的方法,因此在目标 c 中,点表示法对应于嵌套方法调用,其中触发了 ivar 访问方法每个点。对于任何给定的代码,更少的点等于更少的消息被触发。一些人推测,对于某些代码模式,理论上,这可以由编译器进行优化。在实践中,无论出于何种原因,它似乎都不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2015-09-10
    • 2015-11-22
    • 2018-01-24
    • 2014-05-26
    相关资源
    最近更新 更多