Objective-C 类目
2015-07-25 17:10
441 查看
Objective-C 类目
类目(类别):有时候我们封装了一个类,不想再动它了,可随着程序功能的增加,需要在原来的类中添加一个小小的方法.这个时候我们就不需要在原来的类中进行修改或者定义一个子类.只需要添加这个类的类目就可实现功能的添加.类目的声明:
@interface NSString (StringMethod) @end
该声明具有2个特点。首先,现有类位于@interface关键字之后,其后是位于圆括号中的一个新名称。该声明表示,类别的名称是StringMethod,而且该类别将向NSString类中添加方法。只要保证类别名称的唯一性,你可以向一个类中添加任意多得类别。
比如这里我们需要对NSString类添加一个类目StringMethod,那么文件名就是:
NSString+StringMethod.h
NSString+StringMethod.m
直接上代码
NSString+StringMethod.h#import <Foundation/Foundation.h> @interface NSString (StringMethod) // 输入两个日期 判断两个日期是否在同一个月 -(BOOL)isEqualTwoDate:(NSString *)otherdate; //拼接两个日期 - (NSString *)appendTwoDate:(NSString *)otherDate; //给定两个时间,判断时间是否在这两个时间区间内 - (BOOL)isINTimeZone:(NSString *)beginTime end:(NSString *)endTime; //传过去一个字符串,返回一个时间的对象NSDate - (NSDate *)stringToDate; + (NSDate *)stringToDate:(NSString *)dateStr; @end
NSString+StringMethod.m
#import "NSString+StringMethod.h" @implementation NSString (StringMethod) //这个方法需要两个参数,第一个参数就是方法的调用者,谁调用了这个方法,那么在这个方法的内部,self就是使用方法的那个对象. -(BOOL)isEqualTwoDate:(NSString *)otherdate{ NSLog(@"%@",self); NSString *month1 = [self substringWithRange:NSMakeRange(5,2)]; NSString *month2 = [self substringWithRange:NSMakeRange(5,2)]; return [month1 isEqualToString:month2]; } //拼接两个日期 - (NSString *)appendTwoDate:(NSString *)otherDate{ NSString *newDate1 = [self substringToIndex:6]; NSString *newDate2 = [self substringFromIndex:11]; NSString *str = [NSString stringWithFormat:@"%@-%@",newDate1,newDate2]; return str; } //给定两个时间,判断时间是否在这两个时间区间内 - (BOOL)isINTimeZone:(NSString *)beginTime end:(NSString *)endTime{ return [self compare:beginTime] >0 && [self compare:endTime] < 0; } -(NSDate *)stringToDate{ //设置格式 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"]; return [formatter dateFromString:self]; } +(NSDate *)stringToDate:(NSString *)dateStr{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"]; return [formatter dateFromString:dateStr]; } @end
类目的局限性
第一,无法向类中添加新的实例变量。类别没有位置容纳实例变量。第二,名称冲突,即类别中得方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你得类别方法将完全取代初始方法,从而无法再使用初始方法。有些编程人员在自己的类别方法中增加一个前缀,以确保不发生名称冲突。
相关文章推荐
- object c中 new和alloc区别
- 关于Objective-C格式化处理相关规范
- Objective-C面向对象-对象和类
- javascript笔记07:使用Object类为实例定义方法和属性
- Object-C 内存管理模式初探(一)
- Fit_primitives_object_model_3d.hdev相关例程学习
- Objective-C设计模式——桥接Bridge(接口适配)
- 挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject
- javascript Object的长度
- Objective-C学习笔记(二十七)——方法的重载与重写
- Objective C Bridging header —— swift MD5
- Objective-C学习笔记(二十六)——成员变量的继承学习
- kvc和字典在创建键值对时的相同与区别(setValue forKey )(setObject forKey)
- 【iOS开发之Objective-C】单例的创建
- Objective-C学习笔记(二十五)——属性与方法的继承学习
- Objective-C学习笔记(二十四)——成员变量的访问修饰符学习
- pyqt的setObjectName()/findChild()
- Objective-C学习笔记(二十三)——面向对象之封装
- Objective-c的MD5/SHA1加密算法的实现
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法