ios 为一个类添加一个方法有哪些方法

2025-12-18 05:07:55
推荐回答(2个)
回答1:

Obj-C用起来真是各种happy,比如现在有这样一种情况:有一个类,我们希望它能响应一个消息(message),但是这个类没有相应的方法(method),而你又偏偏不能重写/继承这个类。这时我们可能会想到,能不能动态地给类添加一个方法呢?感谢Obj-C,仅需简单几步就能实现。

先看一段代码

#if TARGET_IPHONE_SIMULATOR 
#import  
#else #import  
 #import  
#endif   
@interface EmptyClass:NSObject   
 @end   
 
 @implementation EmptyClass   
@end   
 
void sayHello(id self, SEL _cmd) 
 { NSLog(@"Hello"); }   
 
- (void)addMethod 
 { 
     class_addMethod([EmptyClass class], @selector(sayHello2), (IMP)sayHello, "v@:");   
     // Test Method 
    EmptyClass *instance = [[EmptyClass alloc] init]; [instance sayHello2];
    [instance release];   
}

我们首先定义了一个EmptyClass,继承NSObject,没有任何自带方法,接着定义了一个函数。这里提一句,Obj-C的方法(method)就是一个至少需要两个参数(self,_cmd)的C函数,这个函数仅仅输出一句Hello。接下来在addMethod方法中,我们调用class_addMethod()为EmptyClass添加方法,class_addMethod()是这样定义的:

BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

参数说明:

cls:被添加方法的类

name:可以理解为方法名,这个貌似随便起名,比如我们这里叫sayHello2

imp:实现这个方法的函数

types:一个定义该函数返回值类型和参数类型的字符串,这个具体会在后面讲

接着创建EmptyClass的实例,调用sayHello2,运行,输出Hello,添加方法成功。

回答2:

你在类中定义一个方法- (void)buttonPressed;
在该类的对象中,使用[self buttonPressed]即可直接调用;
也可以使用selector,下面这个例子是button点击时调用的例子:
[button1 addTarget:self action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];