使用块在方法中定义私有方法而不是使用真正的私有方法有什么缺点?除了无法从其他地方调用该方法之外还有什么吗?
示例:
-(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;
}
答案 0 :(得分:6)
我认为最大的三个缺点是:
将此块移动到方法中可以解决所有这些问题。如果某个块使用块回调作为参数来使用该块,则始终可以return the block from a method。
答案 1 :(得分:1)
可以说代码导航起来比较困难 - 你往往会在某个函数的中间隐藏着非常模糊的入口点,并且在调试器或搜索中没有可以看到的函数名,这可以使调试和跟踪变得有点更难。
答案 2 :(得分:1)
清晰的代码很重要。
方法允许您将整个代码段彼此分开封装,并且可以使其更易于阅读..
在块上选择私有方法的另一个原因是内存管理。这在很大程度上要讨论这个问题,但足以说在内存管理中块很奇怪,并且在这方面不像其他任何代码结构那样。