类目(Category)
延展(Extension)
协议(Protocol)
一.类目
OC语言中的类目机制只有一个作用:为任何一个类添加方法
注意:
#import <Foundation/Foundation.h>
@interface NSString (Overturn)
-(NSString *)overturn;
@end
#import "NSString+Overturn.h"
@implementation NSString (Overturn)
//实现字符串的翻转
-(NSString *)overturn
{
NSMutableString *str=[NSMutableString string];
for(int i = (int)self.length; i >=0; i--)
{
char c = [self characterAtIndex:i-1];
[str appendFormat:@"%c",c];
}
return str;
}
@end
#import <Foundation/Foundation.h>
#import "NSString+Overturn.h"
#import "NSString+Cate.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *str=@"abcd";
NSString *str1=[str overturn];
NSLog(@"%@",str1);
NSNumber *num=[str lengthAsString];
NSLog(@"%@",num);
}
return 0;
}
#import "MyClass.h"
@interface MyClass ()
-(void)add;
@interface MyClass : NSObject
-(void)select;
@implementation MyClass
-(void)select{
NSLog(@"%s",__func__);
}
-(void)add{
NSLog(@"%s",__func__);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
MyClass *class=[[MyClass alloc]init];
[class select];
[class add];
}
return 0;
OC中的协议为一组方法的声明。不需要实现。遵守协议的类负责实现协议中的方法。
协议使用@protocol
关键字进行声明。
其声明的方法中分为必须实现的方法和可选实现的方法。分别用@required
和@optional
关键字标示。
如果不写默认为必须实现的方法
@required //必须实现的方法
-(void)study;
@optional //可实现可不实现的方法
-(void)work;
@implementation Studeny
-(void)study{
NSLog(@"%s",__func__);
}
//-(void)work{
// NSLog(@"%s",__func__);
#import "Studeny.h"
@autoreleasepool {
Studeny *stu=[[Studeny alloc]init];
// [stu study];
//判断协议是否有该方法
if([stu respondsToSelector:@selector(study)]){
[stu study];
// [stu work];
}else{
NSLog(@"找不到好工作");
}
}else{
NSLog(@"没有参加培训");
}
if([stu conformsToProtocol:@protocol(lamcoProtocol)]){
if ([stu respondsToSelector:@selector(giveMoney)]) {
NSLog(@"每月还钱");
}else{
NSLog(@"成为黑户");
}
}else{
NSLog(@"不关事");
}
}
return 0;