【发布时间】:2011-09-15 12:08:09
【问题描述】:
+(BOOL)resolveClassMethod:(SEL)aSel {
NSString *lString = NSStringFromSelector(aSel);
if ([self validateLetterAndAccidental:lString]) {
id (^noteFactoryBLOCK)(id) = ^(id aSelf) {
return [self noteWithString:lString];
};
IMP lIMP = imp_implementationWithBlock(noteFactoryBLOCK);
...
我在最后一行收到错误,因为 noteFactoryBLOCK 被强制转换为 void* 而 ARC 不允许这样做。目前有没有办法完成我想要的?我想要一个可以在运行时传递给 class_addMethod 的 IMP。
编辑
IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK));
这一行给我一个警告而不是错误 - Semantic Issue: Passing 'objc_objectptr_t' (aka 'const void *') to parameter of type 'void *' discards qualifiers
【问题讨论】:
标签: objective-c dynamic casting implementation void-pointers