Objective-C块参数类型推断

时间:2014-12-09 15:46:52

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

我在-[NSItemProvider loadItemForTypeIdentifier:options:completionHandler:]的文档中看到了以下段落:

  

扩展可以在完成处理程序块中指定项目值的预期类。如果返回的项的值类与指定的类不匹配,则在完成块的error参数中返回错误。项提供程序可以对块中指定的项执行简单类型转换,例如从NSURL到NSData或NSFileWrapper,或从NSData到UIImage(在iOS中)或NSImage(在OS X中)。

不是想要让API像疯了一样疯狂,但现在我很好奇。运行时块类型推断如何工作?

2 个答案:

答案 0 :(得分:1)

显然这并不新鲜。已经回答here

基本上,您可以公开重新声明块ABI的私有部分(请参阅this struct definition)并使用该部分创建NSMethodSignature(请参阅this line of code)。

答案 1 :(得分:0)

来自文档:

typedef void (^NSItemProviderCompletionHandler)(id <NSSecureCoding> item, NSError *error);
  

讨论:要完成加载请求,a   调用此表单的块以使您有机会验证该项目   输入并妥善处理。

因此,该块的目的似乎是让编码人员介入并验证事物。

有很多方法可以使用Objective-C运行时。最简单的方法是使用NSObject协议定义的方法(不要与NSObject类混淆......)

-(BOOL)isKindOfClass:(Class)aClass;
-(BOOL)isMemberOfClass:(Class)aClass;
-(BOOL)respondsToSelector:(SEL)aSel
-(BOOL)conformsToProtocol:(Protocol*)aProtocol;