-(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例
-(BOOL) isMemberOfClass: classObj 用来判断是否是某个类的实例
-(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递)
+(BOOL) instancesRespondToSelector: selector 用来判断实例是否有以某个名字命名的方法. 和上面一个不同之处在于, 前面这个方法可以用在实例和类上,而此方法只能用在类上.
-(id) performSelector: selector
SEL sel = @selector (start:) ; // 指定action
if ([obj respondsToSelector:sel])
{ //判断该对象是否有相应的方法
[obj performSelector:sel withObject:self]; //调用选择器方法
}
使用[[UIApplication sharedApplication] keyWindow]查找应用程序的主窗口对象
respondsToSelector判断是否实现了某方法
Tester.h
#import <Foundation/Foundation.h>
@interface Tester : NSObject {
}
-(void) test:(NSString*) msg;
-(void) notImp;
@end
Tester.m
#import "Tester.h"
@implementation Tester
-(void) test:(NSString*) msg
{
NSLog(@"%@", msg);
}
@end
注意:没有实现notImp方法
main.m
#import <Foundation/Foundation.h>
#import "Tester.h"
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id tester = [[Tester alloc] init];//注意,这里使用id
SEL testSelector = @selector(test:);
SEL notImpSelector = @selector(notImp:);
if([tester respondsToSelector:testSelector])
{
//tester.m中实现了test方法
[tester test:@"invoke test method"];
}
if([tester respondsToSelector:notImpSelector])
{
//test.m中没有实现此主就去
[tester notImp];
}
[pool drain];
return 0;
}
分享到:
相关推荐
if ([touchBarItem respondsToSelector:selector]) { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[privateTouchBarItemClass instanceMethodSignatureForSelector:selector]]; ...
- **实现方法**:使用`class_respondsToSelector:`方法检查方法签名。 - **应用场景**:运行时确定类或对象是否支持特定方法。 - **1.20 确定类是否在运行时可用** - **知识点**:类的动态加载。 - **实现方法**...
- 在发送消息前,确保selector是有效的,可以使用`respondsToSelector:`或`instancesRespondToSelector:`进行检查。 - 使用`performSelector:withObject:afterDelay:`时,避免在主线程中执行耗时操作,以防止阻塞UI...
因此,在使用`performSelector`前,最好先使用`instancesRespondToSelector:`或`respondsToSelector:`进行检查。 8. **KVC与KVO**: - `performSelector`在Key-Value Coding(KVC)和Key-Value Observing(KVO)中...
在DBToEntity这个文件中,可能包含了实现上述功能的代码示例,包括数据库操作工具类、实体模型类以及数据绑定的相关方法。通过阅读和学习这个文件,开发者可以更好地理解如何在Objective-C中实现SQLite数据与实体...
这里,`performAction:`方法被调用时,会通过`delegate`调用`handleAction:`,传递相关信息。 5. **安全使用委托**:在调用`delegate`方法之前,应检查`delegate`是否为`nil`,并确保它实现了相应的方法。`...
在这个"iOS代理协议DEMO"中,我们将深入探讨如何在iOS应用中使用代理来实现功能交互,特别是与用户界面相关的颜色变化。 首先,我们需要理解什么是代理模式。代理模式是一种结构型设计模式,它允许我们为其他对象...
根据给定的信息,我们可以整理出一系列与iOS开发相关的高级面试知识点。下面将对这些知识点进行详细解释和扩展。 ### 面试题88:autorelease是什么?如何使用? **autorelease** 是Objective-C中的一种内存管理...
if ([(id)cls respondsToSelector:sel]) { [(id)cls performSelector:sel withObject:@"http"]; [(id)cls performSelector:sel withObject:@"https"]; } } ``` 然后,需要注册NSURLProtocol拦截: ```...
target设置为其他对象可以解决NSTimer循环引用问题,但是在某些情况下,可能需要在其他对象中访问self的相关信息,这样会带来很多不便之处。 ### 3. 使用weak属性的对象A包裹self作为target 使用weak属性的对象A...
总之,解决iOS 8中UITableView设置`setSeparatorInset:UIEdgeInsetsZero`无效的问题,关键在于正确处理布局Margins和分割线的边距,通过在UITableView和UITableViewCell中分别设置相关属性,可以达到期望的效果。...
本文将深入探讨"Xcode代码生成"这一主题,主要涉及懒加载、NSCoding协议以及接口转属性的相关知识点。 **懒加载(Lazy Loading)** 懒加载是一种优化程序性能的设计模式,它推迟了某些资源的初始化,直到这些资源...
- **动态识别(Dynamic types)**: Objective-C支持运行时类型检查,可以利用`isKindOfClass:`或`respondsToSelector:`等方法来确定对象的类型和是否能响应某个方法。 - **Categories**: 类别是Objective-C的一个...
在iOS 11中,scrollView可能会默认位移,解决方法是使用setContentInsetAdjustmentBehavior方法设置scrollView的contentInsetAdjustmentBehavior为UIScrollViewContentInsetAdjustmentNever。 ```objective-c -...
本篇文章将根据提供的部分标题、描述、标签以及部分内容,整理并提炼出与iOS大厂面试相关的知识点,旨在帮助准备面试的朋友更好地理解和掌握这些核心概念。 ### 关键知识点概览 1. **KVC (Key Value Coding)**:...
总结来说,iOS中实现强制转屏、强制横屏和强制竖屏主要是通过重写`UIViewController`的相关方法,以及在必要时使用私有API。但是,使用私有API存在风险,因此在实际开发中应尽量遵循Apple的官方指南,利用公开的API...
3. **动态类型**:Objective-C 支持运行时类型识别,可以通过 `isKindOfClass:` 或 `respondsToSelector:` 方法检查对象的实际类型及其支持的方法。 #### 五、标准库与框架 Objective-C 2.0 提供了丰富的标准库和...
前提:如果使用的自定义UINavigationController基类,请不要在此基类里写相关的手势操作方法。 代码如下: -(void)viewDidAppear:(BOOL)animated{ if ([self.navigationController respondsToSelector:@selector...
原理:使用Category,参数经过判断后才能执行方法,再将原生抛异常的方法替换,所以不需要修改任何已有的代码,仅import工具包的头文件,即可解决部分异常问题。 如果看源码可以发现NSArray的实现比较绕,这是因为...
在iOS 8之前,开发者通常使用`ABPeoplePickerNavigationController`类及其相关的代理方法来实现通讯录的选择和读取。以下是旧版的方法: ```objc - (void)peoplePickerNavigationControllerDidCancel:...