Original http://www.cnblogs.com/lovekarri/archive/2012/03/04/2379197.html
Yesterday did a demo, using a simple proxy.
Delegate is a design pattern for iOS programming. We can use this design pattern to let a single-inherited objective-c class exhibit the characteristics of a class outside its parent class. Yesterday this proxy implementation is as follows:
The class Gifview is inherited from UIView, and it loads on Rootviewcontroller to play the animation through a timer. At the same time, Rootviewcontroller needs to know every execution of the timer.
The code is as follows.
First, define the Gifview, define the proxy everyframedelegate in its header file, and declare the method-(void) dosomethingeveryframe;
#import <UIKit/UIKit.h>
@protocol everyframedelegate <NSObject>
-(void) dosomethingeveryframe;
@end
{
Nstimer *timer;
ID <EveryFrameDelegate> delegate;
Nsinteger Currentindex;
}
@property (nonatomic, retain) ID <EveryFrameDelegate> delegate;
@end
Then, just let the timer in the GIFVIEW.M call delegate to execute the Dosomethingeveryframe each time it executes, the code is as follows
-(ID) initWithFrame: (CGRect) frame
{
self = [super Initwithframe:frame];
if (self)
{
Timer = [Nstimer scheduledtimerwithtimeinterval:0.05 target:self selector: @selector (play) Userinfo:nil Repeats:yes];
[Timer fire];
}
return self;
}
-(void) play
{
[Delegate Dosomethingeveryframe];
}
The work on the Gifview is done.
The following is the code in Rootviewcontroller, Rootviewcontroller can know every execution of a timer by specifying its proxy as itself when defining Gifview:
-(void) viewdidload
{
[Super Viewdidload];
Additional setup after loading the view, typically from a nib.
CGRect rect = CGRectMake (0, 0, 200, 200);
Gifview *tmp = [[Gifview alloc] initwithframe:rect];
Tmp.delegate = self;
[Self.view addsubview:tmp];
[TMP release];
}
-(void) dosomethingeveryframe
{
NSLog (@ "I ' m The delegate! I ' m doing printing! ");
}
Every time a timer executes in a gifview, one line is printed
I ' m The delegate! I ' m doing printing!
So, Rootviewcontroller knew every time the timer was executed.
==================== I am the Happy dividing line ====================
The following content is added for 2013.3.12
In the Rootviewcontroller header file you need to introduce GifView.h this header file and indicate that Rootviewcontroller follows the proxy everyframedelegate. Otherwise, a warning will appear.
The code is as follows:
#include <UIKit/UIKit.h> #import "GifView.h" @interface Rootviewcontroller:uiviewcontroller < Everyframedelegate> @end
In addition, adding the keyword @optional when defining the proxy indicates that the agent can not implement all the proxy methods without being alerted.
The code is as follows:
@protocol everyframedelegate <NSObject> @optional-(void) ifyouneedthis;-(void) dosomethingeveryframe; @end
Simple implementation of IOS proxy