gpt4 book ai didi

ios - 它是否正确?使用 performSelector 而不是直接调用方法

转载 作者:行者123 更新时间:2023-11-28 19:22:16 28 4
gpt4 key购买 nike

我正在尝试使用此方法关闭 super View [self.superview buttonPressedClose];

我已经在我的 super View 中实现了那个方法,一切正常。

但它在编译期间给了我一个警告“UIView 可能不会响应‘buttonPressedClose’”。

如果我将其更改为以下行,它不会给我警报,但这是正确的做法吗?

if ([self.superview respondsToSelector:@selector(buttonPressedClose)]) {
[self.superview performSelector:@selector(buttonPressedClose) withObject:nil afterDelay:0.0];
}

谢谢。

**编辑错字..

最佳答案

这是有问题的错字还是您的代码中的错字?

if ([self.superview respondsToSelector:@selector(buttonPressedClose)]) {
// vv here
[self.superview performSelector:@selector(buttonPressedCLose) withObject:nil afterDelay:0.0];
}

通常,self.superview 返回类型为 UIView 的对象,而您的 buttonPressedClose 是自定义选择器, 中未实现>UIView。这就是您收到警告的原因。

您可能希望将 self.superview 转换为您想要的类型,例如:

[(MyView *)self.superview buttonPressedClose];

或者让它更加神秘并转换为 id - 编译器不会检查选择器是否存在:

[(id)self.superview buttonPressedClose];

也就是说,上述所有解决方案都有点臭。

关于 performSelector: 的一件非常重要的事:零延迟 - 它不会就地执行选择器,而是将选择器执行发布到线程的运行循环并执行当控制返回到运行循环时(即当调用堆栈为空时)。所以在正常情况下你不会喜欢使用它。

关于ios - 它是否正确?使用 performSelector 而不是直接调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779484/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com