嵌套语句而不是创建新的一次性对象?

时间:2012-11-03 03:01:35

标签: objective-c cocoa-touch cocoa

这里有一个问题。

我为什么要这样做:

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(lineNum = %d)", i];
    [request setPredicate:pred];

什么时候可以这样做?

    [request setPredicate:[NSPredicate predicateWithFormat:@"(lineNum = %d)", i]];

我找到的每个教科书代码示例都使用第一种方法,但据我所知,第二种方法基本上会做同样的事情,只是看起来更整洁。 “pred”只被调用一次所以为什么要把它作为一个对象?

2 个答案:

答案 0 :(得分:5)

这主要与文本书的格式有关:在页面上很难容纳超过一定数量的字符,因为书籍没有滚动条。除此之外,两者是相同的。

在现实生活中这样做的一个原因是,您可以在致电pred之前设置一个断点并检查setPredicate:

答案 1 :(得分:3)

哪一个看起来更整洁只是一个偏好的问题。

两者之间没有功能差异。

对于更复杂的情况,第一种模式允许更自解释的代码,因为您可以放置​​有意义的变量名称:

NSPredicate *correctLineNumber = 
   [NSPredicate predicateWithFormat:@"(lineNum = %d)", i];
[request setPredicate:correctLineNumber];