main.h
#pragma mark 类的管理
#pragma mark 类的分组(重点)
/**
* 分类(Category):常用来给拿不到源代码的类添加新方法或用来管理一个类的方法列表,将功能相似的方法声明、实现写在一个分类中(苹果的做法)
* 在分类中只能添加新的方法,不能添加新的实例变量
**/
NSString *string = @"lll";
[string sayHi];
[string sayHello];
NSDate *date = [NSDate exchange:@"20140505120512"];
NSLog(@"%@",date);
Person *person = [[Person alloc] init];
[person sayHi];
#pragma mark Extension延展
/**
* 延展是用来给类添加私有实例变量、方法的一种管理方式。
* 延展和分类的区别:
* 1、分类中只能添加新方法,不能添加实例变量,延展中可以添加私有方法和实例变量
* 2、使用分类添加的方法可以在类的外部访问,使用延展添加的实例变量和方法,只能在类的内部使用,在外部访问不到。
* 3、分类可以使用一对.h.m文件来管理,延展一般直接在类的.m中添加延展标签,在延展标签中写代码
*
**/
1.延展
Person_PersonExtension.h
#import "Person.h"
@interface Person ()
// 我们可以通过延展来给类添加一个私有的实例变量,该实例变量,不管可见度是什么,在类的外部都不能被访问到,只能在类的内部访问。
{
NSString *_name;
}
- (void)heHe;
@end
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
// 在能拿到源代码的类中(自定义的类),我们可以使用分类来管理功能相似的方法,也可以在分类中给该类添加新方法
@interface Person (sayHi)
- (void)sayHi;
@end
Person.m
#import "Person.h"
#import "Person_PersonExtension.h"
// 延展中的小括号必须保持空白,如果小括号中添加了其他字符,则该延展会变成一个私有分类,分类不可以添加实例变量
@interface Person ()
{ // 使用延展给本类添加一个私有实例变量
NSString *_gender;
}
@end
@implementation Person
- (void)heHe{
NSLog(@"哈哈哈");
}
@end
@implementation Person (sayHi)
//对于在分类中声明的方法,我们既可以在本类的实现标签中添加实现方法,也可以新建一个Category的实现标签,在这个实现标签(.m文件)中实现新方法
- (void)sayHi{
NSLog(@"hello");
}
@end
2.为日期类添加一个dataWithDateString方法
NSDate+dataWithDateString.h
#import <Foundation/Foundation.h>
@interface NSDate (dataWithDateString)
+ (NSDate *)exchange:(NSString *)str;
@end
NSDate+dataWithDateString.m
#import "NSDate+dataWithDateString.h"
@implementation NSDate (dataWithDateString)
+ (NSDate *)exchange:(NSString *)str{
// 1.创建出格式化对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 2.设置formatter的格式
[formatter setDateFormat:@"yyyyMMddHHmmss"];
// 2.将字符串转化为时间对象,并返回
NSDate *date = [formatter dateFromString:str];
return date;
}
@end
3.为NSString类添加一个sayHi方法
NSString+sayHi.h
#import <Foundation/Foundation.h>
@interface NSString (sayHi)
- (void)sayHi;
- (void)sayHello;
@end
NSString+sayHi.m
#import "NSString+sayHi.h"
@implementation NSString (sayHi)
- (void)sayHi{
NSLog(@"lalala");
}
- (void)sayHello{
NSLog(@"洛洛是宗儒的男人!!!");
}
@end