天天看點

Objective-C 類目Objective-C 類目

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
           

類目的局限性

第一,無法向類中添加新的執行個體變量。類别沒有位置容納執行個體變量。

第二,名稱沖突,即類别中得方法與現有的方法重名。當發生名稱沖突時,類别具有更高的優先級。你得類别方法将完全取代初始方法,進而無法再使用初始方法。有些程式設計人員在自己的類别方法中增加一個字首,以確定不發生名稱沖突。

繼續閱讀