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(,)];
NSString *month2 = [self substringWithRange:NSMakeRange(,)];
return [month1 isEqualToString:month2];
}
//拼接兩個日期
- (NSString *)appendTwoDate:(NSString *)otherDate{
NSString *newDate1 = [self substringToIndex:];
NSString *newDate2 = [self substringFromIndex:];
NSString *str = [NSString stringWithFormat:@"%@-%@",newDate1,newDate2];
return str;
}
//給定兩個時間,判斷時間是否在這兩個時間區間内
- (BOOL)isINTimeZone:(NSString *)beginTime end:(NSString *)endTime{
return [self compare:beginTime] > && [self compare:endTime] < ;
}
-(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
類目的局限性
第一,無法向類中添加新的執行個體變量。類别沒有位置容納執行個體變量。
第二,名稱沖突,即類别中得方法與現有的方法重名。當發生名稱沖突時,類别具有更高的優先級。你得類别方法将完全取代初始方法,進而無法再使用初始方法。有些程式設計人員在自己的類别方法中增加一個字首,以確定不發生名稱沖突。