//協議特色:制定一份協議,其餘類若是遵照就須要去實現前提是required(默認)
// < > 遵照
// NSObject 既是基協議 又是基類,所以,協議最終都需遵照NSObject
// required 必須實現 optional 可選實現
// respondToSelector:@selector(方法名) 判斷一個方法是否存在
// 子類繼承父類 那麼子類也遵照父類的協議
// 協議能夠多遵照,如: <myProtocol , NSObject>
// 警記! 協議只是相似方法聲明,實現還在本身類中
// 類與類之間相互引用 @class 前置一個。
// 對象與對象之間相互調用 至少一端是weak。函數
#import <Foundation/Foundation.h>oop
//定義一個協議 名字是myProtocol 遵照基協議 <NSObject>
@protocol myProtocol <NSObject>ui
//必須實現的
@required
- ( void ) say;
@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic, assign) int timerCount;atom
//可選實現的
@optional
- ( void ) log;
@endspa
//Person的另外一個協議teach
@protocol teach <NSObject>
//可選的
@optional
- (void) run;
- (void) speak;
- (void) teach:(NSString *)sentence;.net
@end對象
//判斷是否存在say方法(重點)繼承
SEL sel = @selector(say);
if( [person1 respondsToSelector:sel ]){
NSLog( @" you say " );
}else{
NSLog( @" meiyou say " );
}
get
//子類一旦繼承父類,相關父類遵照的協議 子類也須要遵照 能夠使用
@interface Student : Personit
@end
//標準協議寫法 須要寫出所遵照的協議
Student<teach> *stu = [[Student alloc]init];
//當類屬性寫在協議裏是,在類中的.m文件中須要用@synthesize(重點)
@implementation Person
@synthesize timer = _timer , timerCount = _timerCount;
//如下是NSTimer的使用方法(重點)
- (id) init
{
self = [super init];
if( self ){
_timer = [NSTimer scheduledTimerWithTimeInterval:1.0F target:self selector:@selector(say) userInfo:nil repeats:YES];
}
return self;
}
- (void) say
{
_timerCount++;
NSLog( @"人說:Hello %i" , _timerCount);
if( _timerCount > 5 ){
[_timer invalidate];
}
}
@end
//main函數中寫的調用函數 (重點)
//[[NSRunLoop currentRunLoop]run];