问题标签 [respondstoselector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4518 浏览

objective-c - Objective-C:为什么在 respondsToSelector 之前检查 nil:?

我见过这样的代码:

但是,发送一条消息nil只返回nil(计算结果为NO),那么为什么不这样做:

如果 ,前者更快delegate == nil吗?无论哪种方式,我更喜欢后者,因为它的代码更少。

并且,less优于more. 每个 Unix 专业人士都知道这一点。

0 投票
3 回答
978 浏览

iphone - Objective-C:如何检查是否支持 C 函数

如何执行运行时检查以查看是否可以使用UIGraphicsBeginImageContextWithOptions仅从 iOS 4 开始可用的 .

我知道我可以检查[[UIDevice currentDevice] systemVersion],但 Apple 建议使用类似NSClassFromString()or的东西respondsToSelector:。有respondsToSelector:for C 函数吗?

0 投票
3 回答
980 浏览

objective-c - 如何知道是否在 Objective C 中调用超类方法

子类扩展父类。Parent 实现协议 C,该协议具有可选方法,包括-(void)d. 孩子有一个实现-d; 它应该调用[super d]吗?

换句话说,[super d]当且仅当某些东西会响应它时,我应该编写什么代码来调用它?假设我不控制 Parent 的实现;它可能随时改变。

这是我想到的所有方法。我目前使用的是 4 号。

显然明智的答案1:

这不起作用,因为 Parent 可能会动态实现 -d 所以当你测试它而不是在现场时它会起作用。或者 Parent 的实现可能会发生变化,因此该测试的结果不再正确。

显然明智的答案2:

这不起作用,因为 NSObject 的 -respondsToSelector 实现会在 Child 中找到实现并在所有情况下都返回 YES。

显然明智的答案3:

当且仅当超类知道它总是实现 -d 时,这才有效;如果实例动态确定此方法是否存在,则此技术将不起作用。比 1 更好,因为它将在运行时获取对 Parent 实现的静态更改。

显然明智的答案4:

如果超类中的方法不存在,则性能很差,因为计算 templateReason 然后将其与异常原因进行比较是昂贵的。

这种机制很脆弱,因为在这种情况下,异常原因字符串的格式可能会在未来的 SDK 或运行时版本中更改。

0 投票
2 回答
789 浏览

ios - 检查 CIFilter 在当前 iOS 中可用

我想使用 iOS5 的一些功能,但仍然兼容地为 iOS4 构建,但我遇到了问题。通常我会使用,respondsToSelector:但我不确定这是否是正确的方法,或者它是否正是我应该插入的。

我正在尝试使用 CIFilter,据我了解,它仅在 iOS5+ 中可用,如何检查它是否在当前安装的操作系统中可用?

提前致谢。

0 投票
3 回答
5838 浏览

objective-c - Objective C - 动态属性的 respondsToSelector

我目前面临检查对象(NSManagedObject)的属性是否存在的问题。

不幸的是方法

总是返回 NO。

我认为这是因为 CoreData 生成的属性是一种新的样式属性 ala

那么有什么想法可以解决这个问题吗?

我非常感谢您的所有建议;)

提前致谢!亚历克斯

0 投票
5 回答
2924 浏览

objective-c - 为什么 -respondsToSelector: 实例方法可以用于类名或类对象?

在 Objective C 编程,4e,第 9 章,程序 9.3:

Q1:

既然-respondsToSelector:是实例方法,而不是类方法,为什么可以Square直接在类上使用呢?

Q2:

这本书说你可以Square在这里使用而不是[Square class]. 它只是一个特殊的捷径,还是这背后有什么机制?

任何帮助将非常感激!提前致谢!

0 投票
1 回答
329 浏览

c++ - 如何确定 void * 指针在运行时是指向 Objective-C 对象还是 C++ 对象

我已经搜索了一段时间,但很惊讶没有人提出这个问题,所以我开始了:

我有一个带有 id 参数的 Objective-C 方法。现在我想用respondsToSelector:它来确定它是否对以下操作有效,如果不是,我有一个备份计划。(这不是ASSERT(0):P)

所以,当有人试图搞砸我并通过 时(id)someC++Object,我当然会遇到很大的崩溃。

我的问题很简单:我可以让一个 C++ 对象respondsToSelector:安全地失败,以便我可以使用我的备份计划(将编码器打在脸上)吗?

0 投票
1 回答
2383 浏览

ios - 代表没有回应

我正在尝试在两个 Viewcontroller 之间使用委托,但不幸的是我的委托没有被解雇。我希望有人可以帮助我解决问题。我有一个名为 MapBackgroundViewController 的 ViewContoller 和一个名为 MapsViewController。如果 MapsBackgroundViewController 的 SegmentedControl 发生变化,应通知 MapsViewController。(我实际上尝试在 iPhone 上用 patrial curl 实现类似地图应用的东西)

这是我的代码的一部分:

MapBackgroundViewController.h

MapBackgroundViewController.m

MapsViewController.h

MapsViewController.m(以下方法由于某种原因从未被调用)

0 投票
2 回答
2397 浏览

objective-c - 使用 respondsToSelector 的性能损失

当 JSON 响应具有无效值时,我将重构许多旧代码,以使客户端对错误的服务器响应和日志异常更加健壮,并且我正在考虑使用 respondsToSelector 检查每个节点的有效性(数据类型)。

我正在检查响应中的数据类型(int、bool 等)

如果 @"feature_enabled" 节点的值不是 0 或 1,则应用程序会崩溃

为了解决这个问题,我会这样做

我没有对此代码进行任何类型的性能分析,但我想知道是否有人可以建议如果我要检查对我打算解析的每个 JSON 响应的选择器的响应,我应该期望什么样的性能损失.

任何指向信息来源的指针表示赞赏!

0 投票
5 回答
5275 浏览

objective-c - super respondsToSelector:返回 true,但实际上调用 super(选择器)会给出“发送到实例的无法识别的选择器”

好吧,我有点困惑。

我有一个 UIScrollView 的子类,这是我尝试像 UI 元素一样水平滚动的“表格视图”。UIScrollView 本身设置了它在内部使用的 UIGestureRecognizers,并且它似乎将自己设置为那些 UIGestureRecognizers 的委托。我的水平表格元素/单元格上也有我自己的 UIGestureRecognizer 设置,我自己的类设置为我自己的 UIGestureRecognizer 的委托。由于我的类是 UIScrollView 的子类,因此在运行时,UIGestureRecognizer 委托调用会针对 UIScrollView 内置 UIGestureRecognizers 和我自己的 UIGestureRecognizers 进入我的类。有点像 PITA,但我们可以通过传递我们不关心的那些来解决这个问题。

问题是检查[super respondsToSelector:@selector()]返回YES,但是当我实际调用它时,return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];我得到以下异常

2012-08-31 12:02:06.156 MyApp[35875:707]-[MyAppHorizo​​ntalImageScrollergestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]: 无法识别的选择器发送到实例 0x21dd50

我原以为它应该显示

-[UIScrollView 手势识别器:shouldRecognizeSimultaneouslyWithGestureRecognizer:]

但这可能没问题。但问题是它说它响应然后没有。

其他两个 UIGestureRecognizer 委托例程使用此代码(显然不同的选择器)。

感谢您的任何见解。