我正在尝试动态创建自定义类的新实例(自定义init
方法调用,BOOL
参数)。我如何使用NSInvocation
来做到这一点?
这是我到目前为止所做的:
NSMethodSignature* signature = [NSClassFromString(className) instanceMethodSignatureForSelector: sel];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature];
[invocation setTarget: [NSClassFromString(className) alloc]];
[invocation setSelector:sel];
[invocation setArgument:&value atIndex:2];
[invocation invoke];
[invocation getReturnValue:&obj];
以上样本引发行[invocation invoke];
错误的错误为"message sent to deallocated instance"
。
答案 0 :(得分:2)
您的代码无效,因为NSInvocation
不会保留目标或任何参数,除非您告诉它(使用retainArguments
)。因此,您alloc
一个实例,然后在invoke
NSInvocation
之前将其销毁。
或者,创建一个实例变量并在其中存储alloc
' d实例,然后将其传递给NSInvocation
。