---------------
FKCar.h
---------------
#import
<Foundation/Foundation.h>
@interface FKCar : NSObject
@interface FKCar : NSObject
@end
---------------
FKCar.m
---------------
#import
"FKCar.h"
@implementation FKCar
- ( void ) move
{
NSLog ( @" 汽车在路上行驶 " );
}
@implementation FKCar
- ( void ) move
{
NSLog ( @" 汽车在路上行驶 " );
}
@end
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#import "FKCar.h"
int main()
{
FKCar * car = [[ FKCar alloc ] init ];
[car performSelector : @selector (move)];
#import "FKCar.h"
int main()
{
FKCar * car = [[ FKCar alloc ] init ];
[car performSelector : @selector (move)];
}
一
、本节代码涉及到的知识点:
1.move方法虽然没有在@interface部分声明,但我们依然可以通过动态机制调用。
2.performSelector是运行时系统负责去找方法的,在编译时候不做任何校验。
3.以下代码分别示范了没有参数、一个参数、两个参数情况下的写法:
- (
id
)performSelector:(
SEL
)aSelector;
- ( id )performSelector:( SEL )aSelector withObject:( id )object;
- ( id )performSelector:( SEL )aSelector withObject:( id )object1 withObject:( id )object2;
- ( void )methodNoParam
{
NSLog( @"methodNoParam" );
}
- ( void )methodWithOneParam:( id )paramFirst
{
- ( id )performSelector:( SEL )aSelector withObject:( id )object;
- ( id )performSelector:( SEL )aSelector withObject:( id )object1 withObject:( id )object2;
- ( void )methodNoParam
{
NSLog( @"methodNoParam" );
}
- ( void )methodWithOneParam:( id )paramFirst
{
NSLog(@"methodWithOneParam: %@", paramFirst);
}
- ( void )methodWithParams:( id )paramFirst andParamSecond:( id ) paramSecond
{
NSLog( @"methodWithOneParam: %@,%@" , paramFirst,paramSecond);
}
BOOL isNoParam= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodNoParam)];
- ( void )methodWithParams:( id )paramFirst andParamSecond:( id ) paramSecond
{
NSLog( @"methodWithOneParam: %@,%@" , paramFirst,paramSecond);
}
BOOL isNoParam= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodNoParam)];
if
(isNoParam)
{
[
self
.selfViewControllerDelegate performSelector:
@selector
(methodNoParam)];
}
BOOL isOneParam= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodWithOneParam:)];
}
BOOL isOneParam= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodWithOneParam:)];
if
(isOneParam)
{
[
self
.selfViewControllerDelegate performSelector:
@selector
(methodWithOneParam:) withObject:
@"firsht"
];
}
BOOL isParams= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodWithParams: andParamSecond:)];
}
BOOL isParams= [ self .selfViewControllerDelegate respondsToSelector: @selector (methodWithParams: andParamSecond:)];
if
(isParams)
{
[
self
.selfViewControllerDelegate performSelector:
@selector
(methodWithParams: andParamSecond:) withObject:
@"first"
withObject:
@"second"
];
}