iOS runtime

—参考文章—

  • 暂时没有

一、如何在Xcode中使用runtime

Xcode默认是不建议开发者使用runtime的,所以在Xcode直接使用runtime的语法是会报错误的。
如果要在Xcode中使用runtime的语法,是需要配置一下才可以使用,配置方法如下图:

  • 首先在1的位置搜索Enable strict
  • 默认是选中Yes的,然后只要选中No即可,然后在项目中使用runtime语法就不会报错误了

配置runtime使用开关

二、几个常用的语法

  • 获取当前对象的所有方法
/* 获取对象的所有方法 */
-(NSArray *)getAllMethods
{
    NSMutableArray *tempMuArr = [[NSMutableArray alloc] init];
    unsigned int methCount = 0;
    Method *meths = class_copyMethodList([self class], &methCount);
    
    for(int i = 0; i < methCount; i++) {
        
        Method meth = meths[i];
        
        SEL sel = method_getName(meth);
        
        const char *name = sel_getName(sel);
        
        NSLog(@"%s", name);
        [tempMuArr addObject:[NSString stringWithFormat:@"%s", name]];
    }
    
    free(meths);
    
    return [tempMuArr copy];
}
  • 获取当前对象的所有属性
/* 获取对象的所有属性 */
- (NSArray *)getAllProperties
{
    u_int count;
    
    objc_property_t *properties  = class_copyPropertyList([self class], &count);
    
    NSMutableArray *propertiesArray = [NSMutableArray arrayWithCapacity:count];
    
    for (int i = 0; i < count ; i++)
    {
        const char* propertyName =property_getName(properties[i]);
        [propertiesArray addObject: [NSString stringWithUTF8String: propertyName]];
    }
    
    free(properties);
    
    return propertiesArray;
}
  • 调用objc_msgSend方法
//调用对象方法
objc_msgSend(tempIamge, @selector(drawInRect:), CGRectMake(0, 0, 1242, 2208));


//调用类方法
//方式1
UIImage *tempImage = ((UIImage *(*)(id, SEL, NSString *)) objc_msgSend)((id)[UIImage class], @selector(imageNamed:), @"test.jpg");
//方式2
UIImage *tempImage = ((UIImage *(*)(id, SEL, NSString *)) objc_msgSend)((id)objc_getClass("UIImage"), sel_registerName("imageNamed:"), @"test.jpg");

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 18:36:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 18:36:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 18:36:01       82 阅读
  4. Python语言-面向对象

    2024-04-25 18:36:01       91 阅读

热门阅读

  1. 使用Apache Cordova将H5游戏打包成apk

    2024-04-25 18:36:01       33 阅读
  2. c++ 智能指针 指针数据监控实验

    2024-04-25 18:36:01       33 阅读
  3. 服务器镜像是什么

    2024-04-25 18:36:01       31 阅读
  4. 消息队列问题解决方案

    2024-04-25 18:36:01       33 阅读
  5. 0003__sax和dom两种xml解析器的区别

    2024-04-25 18:36:01       36 阅读
  6. Elasticsearch索引数据的路由规则与自定义路由分发

    2024-04-25 18:36:01       30 阅读
  7. 不碎片化学习,尽量用整块的时间系统化学习

    2024-04-25 18:36:01       33 阅读
  8. 使用uni-app开发app时遇到mqtt.js不可用的问题

    2024-04-25 18:36:01       31 阅读