ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象

ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象,第1张

概述我想使用一个方法创建一个NSInvocation对象,该方法将指向NSError对象的指针作为参数.这方面的一个例子是 – 方法 – - (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr 我强调,我会像这样设置我的调用 NSData *myData = [ 我想使用一个方法创建一个NSInvocation对象,该方法将指向NSError对象的指针作为参数.这方面的一个例子是 – 方法 –

- (BOol)writetofile:(Nsstring *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr

我强调,我会像这样设置我的调用

NSData *myData = [[NSData alloc] init];SEL writetofileSelector = @selector(writetofile:options:error:);NSMethodSignature *signature = [NSData instanceMethodSignatureForSelector:writetofileSelector];NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];[invocation setTarget:myData];[invocation setSelector:writetofileSelector];Nsstring *string = [Nsstring stringWithFormat:@"long cat"];NSDataWritingOptions *dataOptions;*dataOptions = NSDataWritingfileProtectionComplete;[invocation setArgument:&string atIndex:2];[invocation setArgument:&dataOptions atIndex:3];

对于writetofile:选项:错误:最后一个参数期望接收指针而不是对象.因此,执行以下 *** 作无效 –

NSError *err = nil;[invocation setArgument:&err atIndex:4];

似乎合乎逻辑的是,解决方案可能是创建指向指针的指针,但这会导致编译器警告.我不确定如何正确执行,而不是创建内存管理问题.

解决方法 您创建的参数与您传递给方法的任何其他参数相同.

正如您所指出的,方法签名需要NSError **作为其最后一个参数(索引4).所以,你需要声明一个,但有一些问题.

NSError ** errorPointer

给你一个指向NSError变量的变量.但是,既然你没有告诉它指向任何变量,它指的是零.因此,当您触发调用时,选择器将无法更改错误指针指向的变量.换句话说,它就像调用[myData writetofile:string options:dataOptions error:NulL].

因此,您还需要声明一个NSError变量,并将其地址指定为您的errorPointer应指向的变量:

NSError *error;NSError **errorPointer = &error;

现在您可以将errorPointer作为参数传递,如果在调用方法时出现问题,您将能够稍后检查它.查看this post on NSInvocation以获得更多帮助(帽子提示到Mark Dalrymple指出博客文章)

重要的是还要意识到应该为您创建的参数考虑范围并将其传递给您的调用.看一下我问here的类似问题.

总结

以上是内存溢出为你收集整理的ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象全部内容,希望文章能够帮你解决ios – 如何使用将指向对象的指针作为参数的方法创建NSInvocation对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1053217.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存