对象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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 1,393评论 0 3
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,757评论 0 9
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,200评论 30 471
  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,140评论 1 6
  • 最近算是跟定时器干上了,因为项目需求,我需要在不同的界面放置定时器倒计时,例如 感兴趣的可以去这里看另外一种情况如...
    姚姚先生阅读 243评论 0 0