对象Object介绍:2-对象操作

本节主要介绍对象的一些常见操作,例如判断对象的类型、判断对象是否响应消息、对象间的比较以及对象复制。

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;

你可能感兴趣的:(对象Object介绍:2-对象操作)