+(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。將一個塊投射到一個void *用於動態類方法分辨率
編輯
IMP myIMP = imp_implementationWithBlock(objc_unretainedPointer(noteFactoryBLOCK));
此行給我一個警告而不是錯誤 - Semantic Issue: Passing 'objc_objectptr_t' (aka 'const void *') to parameter of type 'void *' discards qualifiers
ARC現已公開!請參閱http://lists.cs.uiuc.edu/pipermail/cfe-dev/2011-June/015588.html – 2011-06-15 23:01:52