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

你可能感兴趣的:(cat)