我正在尝试为数据库存储过程实现代理。我的想法是让我的代码在数据库中找到一系列存储过程,然后在内存中创建一个代理对象,它将实现与这些存储过程匹配的方法。该代理对象可以从NSProxy或NSObject派生,两者都应该有效。基本思想是对代理对象进行的任何方法调用都将转至resolveInstanceMethod:并在方法调用与数据库中的存储过程匹配时进行处理。
但在接近我的目标之前,我被ARC难倒,似乎不允许我对未申报的方法进行方法调用。回到ARC之前的几天,我们从编译器得到了一个警告,例如“对象可能无法响应选择器”,就是这样,但是启用了ARC,我收到编译器错误,说“没有选择器的已知实例方法.. “。如果我首先将代理对象强制转换为(id),也会发生这种情况。
这似乎意味着ARC与方法的运行时发现不兼容,这是objective-c的基本特征之一。似乎要求所有使用的方法必须在编译之前在接口中声明,就像在C ++中一样。
或者,更有可能的是,我错过了必不可少的东西。如果是这样,是什么?
编辑包含代码:
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
MyTargetClass *mtc = [[MyTargetClass alloc] init];
[mtc doSomething];
}
return 0;
}
MyTargetClass什么都不包含:
@interface MyTargetClass : NSObject
@end
如果在非ARC项目中,[mtc doSomething]调用会引发警告,但会引发ARC的编译器错误。恕我直言,这意味着如果使用ARC,我无法在运行时向类中添加方法。
答案 0 :(得分:0)
mwehlou,
首先,如果您没有向我们展示任何代码,那么很难帮助您。
其次,如果您知道将提供实例方法,那么您可以使用以下#pragma
s来静音警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[Your Selector Based Code Here]
#pragma clang diagnostic pop
如果这是警告符号,那么您可以在Xcode的构建设置中找到它。
安德鲁