您的位置:首页 > 编程语言 > Go语言

OC - ExtensionAndCategory

2015-08-14 20:04 405 查看
<main.m>
#import <Foundation/Foundation.h>
#import "NSString+SayHi.h"
#import "NSDate+Change.h"
#import "Student.h"

int main(int argc, const char * argv[])
{

@autoreleasepool {

//------------------------ NSString+SayHi ---------------------------

//创建字符串对象
NSString *str = @"aa";
[str sayHi];

//创建可变数组

NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"aa",@"dd",@"cc",@"bb",@"ee", nil];

//排序
NSLog(@"升序排列");
[arr sortUsingSelector:@selector(compare:)];
NSLog(@"%@",arr);

NSLog(@"降序排列");
[arr sortUsingSelector:@selector(downCompare:)];
NSLog(@"%@",arr);

//------------------------ NSDate+Change ---------------------------

NSDate *date = [NSDate dateWithDateString:@"20140402142850"];
NSLog(@"%@",date);
//假如把上述方法变为"-"开头的方法,则在 main 中需要创建对象去调用.因为在方法中,类方法不用创建对象去调用,可以直接调用,所以更加方便.所以在写的方法中用不到对象时,一般用类方法.

//------------------------ Student ---------------------------

//创建学生对象
Student *stu1 = [[Student alloc]initWithName:@"zhangsan" sex:@"male" age:18];

}
return 0;
}


<Student.h>

#import <Foundation/Foundation.h>

@interface Student : NSObject
{
NSString *_name;
NSString *_sex;
NSInteger _age;
}
-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;

@end


<Student.m>

#import "Student.h"
//Extension 延展
//为有源代码的类添加 私有的方法 私有的实例变量
//以 @interface 开头 + 类名(当前类名) + ()  ,以 @end 结尾
//中间写的是私有方法的声明,以便于我们去管理

//当出不来@interface的提示时,在这里敲两三个回车就可以出来了
@interface Student ()
//私有实例变量声明
{
NSString *_aaaaa;
}
//私有方法声明
-(void)sayHi;
@end

@implementation Student

-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
{
if ([super init]) {
_name  = name;
_sex = sex;
_age = age;
[self sayHi];
}return self;
}

-(void)sayHi
{
NSLog(@"name %@,sex %@,age %ld",_name,_sex,_age);
}

@end


<NSDate+Change.h>

#import <Foundation/Foundation.h>

@interface NSDate (Change)

+(NSDate *)dateWithDateString:(NSString *)dateString;

@end


<NSDate+Change.m>

#import "NSDate+Change.h"

@implementation NSDate (Change)

+(NSDate *)dateWithDateString:(NSString *)dateString
{
//1.创建日期格式类对象
NSDateFormatter *formatter = [[NSDateFormatter alloc ] init ];
//2.定义格式串
[formatter setDateFormat:@"yyyyMMddHHmmss"];
//3.转化
NSDate *date = [formatter dateFromString:dateString];
return date;
}

//假如把上述方法变为"-"开头的方法,则在 main 中需要创建对象去调用.因为在方法中,类方法不用创建对象去调用,可以直接调用,所以更加方便.所以在写的方法中用不到对象时,一般用类方法.

@end


<NSString+SayHi.h>

#import <Foundation/Foundation.h>

//Category
//为没有源代码的类扩充方法!!!!!不能扩充实例变量,只能添加方法
//以@interface 开头 + 类名(为哪个类添加) + (分类名)
//如果添加完方法,那么相当于原来的类就拥有该方法

@interface NSString (SayHi)

-(void)sayHi;

//降序比较方法

-(NSComparisonResult)downCompare:(NSString *)anotherString;

@end


<NSString+SayHi.m>

#import "NSString+SayHi.h"

@implementation NSString (SayHi)
-(void)sayHi
{
NSLog(@"我为 NSString  写了一个新方法");
}

//降序比较方法
-(NSComparisonResult)downCompare:(NSString *)anotherString
{
return -[self compare:anotherString];
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: