类目 延展
类目:类目可以为一个现有的类扩展新的方法,扩展的方法会成为原始类的一部分
声明一个类时,有实例变量和方法,而如果事后想增加方法的话直接在类里面添加感觉会显得杂乱无章,如果创建一个子类的话,层级多了会糊涂掉。至此,类目诞生。
在类目的实现部分不能添加成员变量,类目没有位置容纳实例变量。
类目中的实现方法可以使用类的属性(成员变量)。
父类中类目,子类可以用关键字super进行调用。
类目的方法名不能与类的方法名相同,若相同就会进行复写,类里面的方法就不在调用
延展就是C语言中的前向申明,如果你想调用一个函数的话,那么在此之前必须要声明一个这个函数
//类目代码
#import <Foundation/Foundation.h>
#import "NSString+Email.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSString *email=@"1234567@qq.com";
BOOL same=[email emiale];
if (same==YES) {
NSLog(@"正确");
}else{
NSLog(@"不正确");
}
}
return 0;
}
#import <Foundation/Foundation.h>
@interface NSString (Email)
-(bool) emiale;
@end
#import "NSString+Email.h"
@implementation NSString (Email)
-(bool) emiale
{
NSRange range=[self rangeOfString:@"@"];
if (range.location !=NSNotFound) {
return YES;
}
return NO;
}
@end
//延展
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
Person *person = [[Person alloc]init];
[person work];
}
return 0;
}
#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void)work;
@end
#import "Person.h"
//延展的定义
//私有的
@interfacePerson( )
-(void)sleep;
@end
@implementation Person
-(void)work{
NSLog(@"工作");
[self sleep];
}
//延展的实现
-(void)sleep{
NSLog(@"睡觉");
}
@end