Objective c NSInvocation的实用函数

Objective c NSInvocation的实用函数,objective-c,cocoa,Objective C,Cocoa,NSInvocation似乎是Cocoa中设计最差的函数之一,因此我决定检查是否有人编写了一个配方,使其更容易使用。我在桌子上找到了一份食谱。现在为了做到这一点,他使用了一些相当老练的技术 您是否建议使用此代码,或者此技术太可能导致难以调试的错误 如果不是,你会推荐什么 最简单的实用程序函数将具有以下接口 + (id)retainedInvocationWithTarget:(id)target invocationOut:(NSInvocation **)invocationOut args:

NSInvocation似乎是Cocoa中设计最差的函数之一,因此我决定检查是否有人编写了一个配方,使其更容易使用。我在桌子上找到了一份食谱。现在为了做到这一点,他使用了一些相当老练的技术

  • 您是否建议使用此代码,或者此技术太可能导致难以调试的错误
  • 如果不是,你会推荐什么

  • 最简单的实用程序函数将具有以下接口

    + (id)retainedInvocationWithTarget:(id)target invocationOut:(NSInvocation
    **)invocationOut args:NSDictionary;
    
    这样做的缺点是不能为参数传递nil。我认为应该有更好的解决办法


    更新:NSNull可以在字典中使用,而不是nil

    我在一些出货的iPhone产品和Mac产品中使用过这种NSInvocation方法。它确实采用了一些奇怪的技术,但无论如何它都不是一个脆弱的黑客:它坚如磐石,速度几乎和NSInvocation的创建一样快

    我确实在代码中有一个retaincount错误(很久以前就修复了),但是在这里调试retaincount并不比在其他任何地方都难


    当然,我的观点是完全有偏见的。

    你想用
    NSInvocation
    做什么?除非你想做一些棘手的事情,否则你通常不会使用它。通常,只要调用方法本身或使用KVC就足够了。因此,建议取决于你想做什么。只是为了给TimeRit添加方法这很酷,实际上让博客作者回答这个问题,但我实际上是在寻找第二个意见=p在阅读了你的其他一些博客文章后,我决定相信你的意见,认为它是坚如磐石