1.category的用法 不修改对象源文件的方式下,给类添加方法
为Student类添加方法
//
// NSObject+StudyCategory.h
//
#import <Foundation/Foundation.h>
#import "Student.h"
#pragma mark 类名后面的(test)代表Category,可以在不修改原来的类文件的情况下,添加新的方法
//pragma mark - 不可以添加新的成员变量
@interface Student (StudyCategory)
@end
//
// NSObject+StudyCategory.m
//
#import "Student+StudyCategory.h"
#import "Student.h"
@implementation Student (StudyCategory)
NSLog(@"Sutdent Category test add %i",a);
}
@end
这样就可以为类Student添加test:方法
外部可直接使用
Student *stu = [[[Student alloc] init] autorelease];
stu test:1\];
#### **2.protocol的用法 这个是代理,类似java中的interface接口**
**//
// StudyProtocol.h
//**
**#import \
@class Button;**
**#pragma mark \<\>代表protocol
@protocol StudyProtocol \**
**- (void)onClick:(Button \*)btn;**
**@end**
//
// Button.h
//
#import \
@protocol StudyProtocol;
@interface Button : NSObject
@property (nonatomic,retain) id\ delegate;
- (void)testClick;
@end
//
// Button.m
//
#import \
#import "Button.h"
#import "StudyProtocol.h"
@implementation Button
- (void)testClick{
//判断有没有当前方法
if(\[_delegate respondsToSelector:@selector(onClick:)\]){
\[_delegate onClick:self\];
}else{
\[_delegate onClick\];
}
}
- (void)dealloc{
\[_delegate release\];
\[super dealloc\];
}
@end
//
// NSObject+ButtonListener.h
//
#import \
#import "StudyProtocol.h"
NS_ASSUME_NONNULL_BEGIN
@interface ButtonListener : NSObject \
@end
NS_ASSUME_NONNULL_END
//
// ButtonListener.m
//
#import \
#import "ButtonListener.h"
@class Button;
@implementation ButtonListener
- (void)onClick:(Button \*)btn{
NSLog(@"button is click %@",btn);
}
@end
使用方法类似java的接口回调机制
**//protocol的用法**
Button \*btn = \[\[Button alloc\] init\];
ButtonListener \*listener = \[\[ButtonListener alloc\]init\];
//设置监听器
\[btn setDelegate: listener\];
//模拟点击
\[btn testClick\];