我在-[NSItemProvider loadItemForTypeIdentifier:options:completionHandler:]
的文档中看到了以下段落:
扩展可以在完成处理程序块中指定项目值的预期类。如果返回的项的值类与指定的类不匹配,则在完成块的error参数中返回错误。项提供程序可以对块中指定的项执行简单类型转换,例如从NSURL到NSData或NSFileWrapper,或从NSData到UIImage(在iOS中)或NSImage(在OS X中)。
不是我想要让API像疯了一样疯狂,但现在我很好奇。运行时块类型推断如何工作?
答案 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;