您的位置:首页 > 移动开发 > Objective-C

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


类目的局限性

第一,无法向类中添加新的实例变量。类别没有位置容纳实例变量。

第二,名称冲突,即类别中得方法与现有的方法重名。当发生名称冲突时,类别具有更高的优先级。你得类别方法将完全取代初始方法,从而无法再使用初始方法。有些编程人员在自己的类别方法中增加一个前缀,以确保不发生名称冲突。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: