runtime------动态添加方法

#import "ViewController.h"

#import "Person.h"

#import

@interface ViewController ()

@end

@implementation ViewController

/*
注意:
1.如果一个类中方法仅仅是声明,并不会加载到内存,只有实现的方法才会加载到内存中

*/

void test(int *count)
{
*count = 2;
}

- (void)viewDidLoad {
[super viewDidLoad];
[self getMethodList];
}

// 获取类中的方法
- (void)getMethodList
{
int a = 0;
int b = 10;
int c = 2;

int arr[] = {a,b,c};
int *p;
p = arr;

NSLog(@"%d %d",arr[1],p[1]);

// 获取Person类中所有方法
// 参数一:获取哪个类的方法列表
// 参数二:方法列表总数
unsigned int count = 0;

// 调用完这个方法,count就有值,记录方法列表总数
// 获取仅仅是当前类
// 返回指向方法列表数组
Method *methodList = class_copyMethodList([Person class], &count);

// OBJC_EXPORT Method *class_copyMethodList(Class cls, unsigned int *outCount)

// 2 0 1
for (int i = 0; i

@interface Person : NSObject

- (void)eat;
- (void)run;
//- (void)study;

@end

#import "Person.h"

@implementation Person

- (void)eat
{
NSLog(@"吃东西");
}

- (void)run
{

}

@end

时间: 2024-10-17 11:58:48

runtime------动态添加方法的相关文章

Runtime(动态添加方法)

A问:  有没有使用过performSelector,什么时候使用?动态添加方法的时候使用过?怎么动态添加方法?用runtime?为什么要动态添加方法? B:Runtime(动态添加方法):OC都是懒加载机制,只要一个方法实现了,就会马上添加到方法列表中. app:免费版,收费版 QQ,微博,直播等等应用,都有会员机制 // 任何方法默认都有两个隐式参数,self,_cmd // 什么时候调用:只要一个对象调用了一个未实现的方法就会调用这个方法,进行处理 // 作用:动态添加方法,处理未实现 +

使用runtime给类动态添加方法并调用 - class_addMethod

上手开发 iOS 一段时间后,我发现并不能只着眼于完成需求,利用闲暇之余多研究其他的开发技巧,才能在有限时间内提升自己水平.当然,“其他开发技巧”这个命题对于任何一个开发领域都感觉不找边际,而对于我来说,尝试接触 objc/runtime 不失为是开始深入探索 iOS 开发的第一步. 刚了解 runtime 当然要从比较简单的 api 开始,今天就罗列整理一下 class_addMethod 的相关点: 首先从文档开始. /** * Adds a new method to a class wi

Runtime(动态添加属性)

下面通过一个实例展示一下Runtime(动态添加属性)的用法

给python类动态添加方法(method)

群里有人问如何做到 def foo(): pass class Bar(object): pass Bar.set_instance_method(foo) b = Bar() b.foo() 这个其实还是比较简单的, 只要写个函数给类设置属性即可, 可根据需求是否用函数包装下, 或者用staticmethod这个decorator: import functools def foo(): print 'hello world' class Bar(object): def __init__(s

runtime动态添加属性

<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; background-color: rgb(254, 254, 242);">使用运行时库,必须要先引入 objc/runtime.h</span> <span style="font-family: Verdana, Arial, Helve

python 面向对象六 动态添加方法 __slots__限制动态添加方法

一.动态添加属性 1 >>> class Student(object): 2 pass 3 4 >>> st = Student() 5 >>> st.name = 'Jack' 6 >>> st.name 7 'Jack' 二.动态给实例添加方法 1 >>> from types import MethodType 2 >>> class Student(object): 3 pass 4 5

runtime与动态添加方法

代码-ViewController.m: #import "ViewController.h" #import "Dog.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; Dog *dog = [[Dog alloc] init]; [dog performSelector:NSSelectorFromString(@"run")]; [dog

nn.Sequential()动态添加方法

之前我们使用nn.Sequential()都是直接写死的,就如下所示: # Example of using Sequential model = nn.Sequential( nn.Conv2d(1,20,5), nn.ReLU(), nn.Conv2d(20,64,5), nn.ReLU() ) # Example of using Sequential with OrderedDict model = nn.Sequential(OrderedDict([ ('conv1', nn.Con

给模型类动态添加方法

想要在每个类上加个方法或者property,一种可以每个类下加,另一种如下 def get_test(self): return 1 from django.contrib.contenttypes.models import ContentType model_list = ['CommonSite'] # 或者也可以直接传类对象,下面就不用ContentType了 for obj in model_list: # ContentType.objects.get(model=obj).mode

python 类对象和实例对象动态添加方法

1 class Person(): 2 def __init__(self, name): 3 self.name = name 4 5 6 def print_name(self): 7 print(self.name) 8 9 p = Person('Li') 10 import types 11 p.print_name = types.MethodType(print_name, p) # 绑定函数到对象 12 p.print_name() 13 14 15 @staticmethod