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;
}

posted @ 2011-04-20 13:36  chenjunbiao  阅读(2404)  评论(0编辑  收藏  举报