NSInvocation调用
CurrentDate.h
#import <Foundation/Foundation.h>
@interface CurrentDate : NSObject {
}
- (NSString *) stringForDate: (NSDate *)date
usingFormatter: (NSDateFormatter *)formatter;
@end
CurrentDate.m
#import "CurrentDate.h"
@implementation CurrentDate
- (NSString *) stringForDate: (NSDate *)date
usingFormatter: (NSDateFormatter *)formatter
{
return [formatter stringFromDate: date];
}
@end
main.m
#import <Foundation/Foundation.h>
#import "CurrentDate.h"
//参考:http://theocacao.com/document.page/264
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//原始调用
NSDateFormatter * dateFormat = [[NSDateFormatter alloc]
initWithDateFormat:@"%b %d %Y"
allowNaturalLanguage: NO];
CurrentDate * currentDateClassObject = [[CurrentDate alloc] init];
NSString * currentDate = [currentDateClassObject
stringForDate: [NSDate date]
usingFormatter: dateFormat];
NSLog(@"currentDate: %@", currentDate);
//NSInvocation调用
SEL mySelector = @selector(stringForDate:usingFormatter:);
NSMethodSignature * sig = [[currentDateClassObject class]
instanceMethodSignatureForSelector: mySelector];
NSInvocation * myInvocation = [NSInvocation invocationWithMethodSignature: sig];
[myInvocation setTarget: currentDateClassObject];
[myInvocation setSelector: mySelector];
NSDate * myDate = [NSDate date];
[myInvocation setArgument: &myDate atIndex: 2];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle: NSDateFormatterMediumStyle];
[myInvocation setArgument: &dateFormatter atIndex: 3];
NSString * result = nil;
[myInvocation retainArguments];
[myInvocation invoke];
[myInvocation getReturnValue: &result];
NSLog(@"The result is: %@", result);
[pool drain];
return 0;
}