本节主要介绍对象的一些常见操作,例如判断对象的类型、判断对象是否响应消息、对象间的比较以及对象复制。
1、判断对象的类型
可以让对象调用isKindOfClass:方法,来判断某个对象的类型。isKindOfClass:方法是NSObject类的方法,将类型为Class的对象aClass作为参数传入,返回一个BOOL类型的返回值。
-(BOOL)isKindOfClass:(Class)aClass;
例如,下面的代码用来判断str是否是NSString类型,如果是NSString类型,则打印一段日志。
//使用类方法创建字符串对象
NSString*str=[NSStringstringWithFormat:@"www.hcios.com"];
//判断对象的类
if([str isKindOfClass:[NSStringclass]]){
NSLog(@"str class is NSString");
}
另外,isKindOfClass:方法还可以用于判断子类对象的类型,如下面的代码所示,NSMutableString是NSString的子类,代码执行后,isKindOfClass:方法也会认定mutableStr对象也是属于NSString类型。
NSMutableString*mutableStr=[NSMutableStringstring];
if([mutableStr isKindOfClass:[NSStringclass]]){
NSLog(@"mutableStr class is NSString");
}
2、判断对象是否响应消息
要判断一个对象是否响应一则消息,则可以调用respondsToSelector:方法。应用程序通常在验证一个对象响应一则消息后,才将消息发送给该对象。
这种机制,常常用于代理中,先判断代理对象是否响应代理方法,如果响应则代表代理中已经实现了代理方法,然后再通知代理执行代理方法。
示例代码:
在自定义类.h文件中,添加一个属性
#import
@interfaceHCClass:NSObject
@property(nonatomic,copy)NSString*myName;
@end
在自定义类.m文件中,对属性进行懒加载(getter方法)
-(NSString*)myName{
if(_myName==nil){
_myName=@"this is my name!";
}
return_myName;
}
在main()中,判断自定义类是否实现了属性的getter方法
//判断对象是否响应消息
HCClass*myClass=[[HCClassalloc]init];
if([myClass respondsToSelector:@selector(myName)]){
NSLog(@"MyName method exist!");
}
3、对象比较
可以使用isEqual:方法对比两个对象,如果相同,则该方法返回YES。
在最常用的Foundation框架中,也提供了isEqualToString:或者isEqualToDictionary:等方法,在实际开发中使用比较广泛。
下方的示例代码中,对字符串进行了比较操作,使用了isEqual:方法以及isEqualToString:方法。
intmain(intargc,constchar*argv[]){
@autoreleasepool{
NSString*str=[NSStringstringWithFormat:@"www.hcios.com"];
NSString*str2=@"宏创学院";
//对象比较
if([str isEqual:str2]){
NSLog(@"str is equal str2!");
}else{
NSLog(@"str is NOT equal str2!");
}
if([str isEqualToString:@"www.hcios.com"]){
NSLog(@"str is equal to string: \"www.hcios.com\"!");
}
}
return0;
}
4、对象复制
通过调用copy方法,可以创建对象的副本。调用copy方法,有个前提条件,即接收的对象的类必须遵守NSCopying协议。
下面的示例代码中,对NSString类型的字符串对象进行复制,NSString类在定义中遵守了NSCopying协议。
@interfaceNSString:NSObject//遵守了NSCopying协议
intmain(intargc,constchar*argv[]){
@autoreleasepool{
NSString*str=[NSStringstringWithFormat:@"www.hcios.com"];
//对象复制
NSString*str3=[str copy];
NSLog(@"str3 is :%@ A",str3);
}
}
return0;