如何使用NSInvocation创建我自己的类的实例?

时间:2014-03-21 15:13:49

标签: ios objective-c dealloc nsinvocation

我正在尝试动态创建自定义类的新实例(自定义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"

1 个答案:

答案 0 :(得分:2)

您的代码无效,因为NSInvocation不会保留目标或任何参数,除非您告诉它(使用retainArguments)。因此,您alloc一个实例,然后在invoke NSInvocation之前将其销毁。

或者,创建一个实例变量并在其中存储alloc' d实例,然后将其传递给NSInvocation