// // main.m // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import <Foundation/Foundation.h> #import "Button.h" #import "ButtonListener.h" int main(int argc, const char * argv[]) { @autoreleasepool { Button *btn = [[[Button alloc] init] autorelease]; ButtonListener *btnl = [[[ButtonListener alloc] init] autorelease]; btn.delegate = btnl; [btn click]; } return 0; }
Button.h
// // Button.h // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import <Foundation/Foundation.h> #import "ButtonDelegate.h" @interface Button : NSObject @property (nonatomic) id<ButtonDelegate> delegate; - (void) click; @end
Button.m
// // Button.m // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import "Button.h" @implementation Button - (void) click{ [_delegate onClick]; } - (void) dealloc{ NSLog(@"Button destory!!"); } @end
ButtonDelegate.h
// // ButtonDelegate.h // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import <Foundation/Foundation.h> @protocol ButtonDelegate <NSObject> //必须实践得方法 @required - (void) onClick; //可不实线得方法 @optional - (void) test; - (void) test2; @end
ButtonListener.h
// // ButtonListener.h // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import <Foundation/Foundation.h> #import "ButtonDelegate.h" @interface ButtonListener : NSObject <ButtonDelegate> @end
ButtonListener.m
// // ButtonListener.m // Protocal // // Created by Rayln Guan on 8/29/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import "ButtonListener.h" @implementation ButtonListener - (void) onClick{ NSLog(@"button click!!"); } - (void) dealloc{ NSLog(@"ButtonListener destory!!"); } @end