如何使用[NSObject instancesRespondToSelector]

时间:2014-11-14 11:45:08

标签: ios objective-c

我不确定如何使用这种方法,我已经尝试过以下代码,并假设两者都应该返回YES,但我观察的是不同的东西。有人可以解释一下吗? [UILocalNotification setRegion:]是iOS8中的新功能。

BOOL test0 = [[[UILocalNotification alloc] init] respondsToSelector:@selector(setRegion:)];
BOOL test1 = [UILocalNotification instancesRespondToSelector:@selector(setRegion:)];

调试窗口显示测试值为:

test0 = (BOOL)YES;
test1 = (BOOL)NO;

1 个答案:

答案 0 :(得分:3)

虽然理解一个是类方法,另一个是实例方法,但我无法理解两者如何(或为什么)会返回不同的答案。如果我这样做会增加混乱

BOOL test2 = [[[[UILocalNotification alloc] init] class] instancesRespondToSelector:@selector(setRegion:)];

然后答案是肯定的!所以我检查过,如果你看一下alloc init返回的对象的类,那就不一样了:

UILocalNotification *local = [[UILocalNotification alloc] init];
NSLog(@"%@", NSStringFromClass([local class]));
NSLog(@"%@", NSStringFromClass([UILocalNotification class]));

返回:

2014-11-14 12:48:14.990 Test[6750:22555] UIConcreteLocalNotification
2014-11-14 12:48:14.991 Test[6750:22555] UILocalNotification

哪个解释了答案的不同之处。