阻止vs私有方法?

时间:2012-06-11 18:28:36

标签: ios objective-c-blocks private-methods

使用块在方法中定义私有方法而不是使用真正的私有方法有什么缺点?除了无法从其他地方调用该方法之外还有什么吗?

示例:

-(NSDictionary*)serialize
{   
    NSMutableDictionary* serialization = [NSMutableDictionary dictionary];

    TwoArgumentsBlockType serializeItemBlock = ^void(MyItemClass* item, NSString* identifier)
    {       
        if (item)
        {
            // serialization code
        }
    };

    serializeItemBlock(self.someItem1, kSomeIdentifier1);
    serializeItemBlock(self.someItem2, kSomeIdentifier2);
    serializeItemBlock(self.someItem3, kSomeIdentifier3);
    serializeItemBlock(self.someItem4, kSomeIdentifier4);
    serializeItemBlock(self.someItem5, kSomeIdentifier5);
    serializeItemBlock(self.someItem6, kSomeIdentifier6);
    serializeItemBlock(self.someItem7, kSomeIdentifier7);
    serializeItemBlock(self.someItem8, kSomeIdentifier8);
    serializeItemBlock(self.someItem9, kSomeIdentifier9);
    serializeItemBlock(self.someItem10, kSomeIdentifier10);
    serializeItemBlock(self.someItem11, kSomeIdentifier11);

    return serialization;
}

3 个答案:

答案 0 :(得分:6)

我认为最大的三个缺点是:

  1. 正如您所提到的,该块不可重复使用。
  2. 该块不可测试 - 您无法编写单元测试来验证该块是否符合您的预期。
  3. 代码不太可读。当您阅读此方法时,重要的是序列化一系列事物,而不是序列化如何实现的细节。
  4. 将此块移动到方法中可以解决所有这些问题。如果某个块使用块回调作为参数来使用该块,则始终可以return the block from a method

答案 1 :(得分:1)

可以说代码导航起来比较困难 - 你往往会在某个函数的中间隐藏着非常模糊的入口点,并且在调试器或搜索中没有可以看到的函数名,这可以使调试和跟踪变得有点更难。

答案 2 :(得分:1)

清晰的代码很重要。

方法允许您将整个代码段彼此分开封装,并且可以使其更易于阅读..

在块上选择私有方法的另一个原因是内存管理。这在很大程度上要讨论这个问题,但足以说在内存管理中块很奇怪,并且在这方面不像其他任何代码结构那样。

相关问题