原文:http://blog.csdn.net/jiangwei0910410003/article/details/41788121
Person.h
Person.m
- //如果没有以下代码的话,上面的延迟调用就不会有效果的,因为他不会阻塞当前线程,所以当前线程中后续的代码会继续执行
- //在main.m中得main方法中,会直接return,这样程序就运行结束了,所以来不及执行2.5s之后方法执行
- //以下代码让执行过程停在此处
- [[NSRunLoop currentRunLoop] run];
- }
- - (NSString *)demo1{
- NSLog(@"demo1");
- return @"demo1";
- }
- - (void)demo2:(NSString *)str{
- NSLog(@"str = %@",str);
- }
- - (void)demo3:(NSString *)str withName:(NSString *)name{
- NSLog(@"str = %@,name = %@",str,name);
- }
- @end
- //或者直接用等号判断
- if(obj1 == obj2){
- //do something...
- }else{
- //do something...
- }
- //2.--------------------performSelector方法
- //调用invoke方法
- //延迟调用某一个方法
- Person *p = [[Person alloc] init];
- [p performSelector:@selector(invoke)];
- //3.--------------------isKindOfClass和isMemberOfClass方法
- Person *rose = [[Person alloc] init];
- //判断rose是否属于Person类创建的
- //BOOL isBelongTo = [rose isMemberOfClass:[Person class]];//返回YES
- BOOL isBelongTo = [rose isMemberOfClass:[NSObject class]];//返回NO
- if(isBelongTo == YES){
- }else{
- }
- //判断rose是否属于子类创建的
- //判断一个类是不是一个类的子类
- isBelongTo = [rose isKindOfClass:[NSObject class]];//返回NO
- //4.---------------------respondsToSelector方法
- //判断类中是否有特定的方法(有实现的方法全部返回YES,如果只在.h文件中定义了,返回的是NO)
- //同时这种方式可以实现调用所谓的私有方法
- Person *task = [[Person alloc] init];
- isBelongTo = [task respondsToSelector:@selector(invoke)];
- if(isBelongTo){
- }else{
- }
1、isEqual方法
他的作用就是判断两个指针变量是否指向同一个对象,在OC中他还有一个简单的用法,就是直接使用"=="来进行比较,这两个效果是一样的,但是在Java中是不同的,Java中的"=="是判断两个引用变量是否指向同一个对象,但是其equals方法是判断两个对象的值是否相等(这里的值指的是基本类型,其他对象类型,可以重写这个方法来进行操作)。
2、isMemberOfClass方法
这个方法的作用是判断一个指针变量指向的对象是不是属于一个类创建的,类似于Java中的obj.getClass()==Person.class效果。
3、isKindOfClass方法
这个方法的作用是判断一个指针变量指向的对象是不是一个类的子类,类似于Java中的instanceof关键字的作用
4、respondsToSelector方法
这个方法我们在之前的文章中使用过了,他的作用就是判断一个类中是否有某个方法,他的判断是只要这个方法有实现,就返回YES
如果只在.h文件中定义了,没有在.m文件中实现的话,也是返回NO的
如果这个方法没有在.h文件中定义,但是在.m文件中有实现的话(私有方法),返回YES
只要方法在.m文件中有才会返回YES
这个方法的功能如果在Java中可以使用反射去实现
5、performSelector方法
这个方法的作用就是调用对象中的一个方法,看到上面的例子,这个方法有很多样式:
无参数样式
一个参数的样式
可以延迟的调用一个方法,这才是该方法的核心作用,他的作用类似于Android中的postDelayed(Runnable runable)方法,同样,这个方法会在后面UI使用中经常使用到,能够延迟的调用一个方法。
同时他还有一个作用可以直接调用一个类的私有方法,即只在.m文件中实现了的方法:
他回经常结合respondsToSelector方法一起使用,这里demo1就是一个私有的方法,如果在Java中需要用到反射,然后还要强暴一下这个私有方法才能调用。在OC中的实现就简单了。