object-c runtime使用

runtime系列--基本数据类型 一、runtime基本数据类型 1、实例变量 /// An opaque type that represents an instance variable. typedef struct objc_ivar *Ivar; 2、属性 /// An opaque type that represents an Objective-C declared property. typedef struct objc_property *objc_property_t; 3、类的实例 /// Represents 阅读详情
最近在学习ios开发,尝试做个通讯录,使用了APAdress来读取系统的通信录,然后需要将通信录中的联系人转换为拼音并进行排序,最先想到的做法是取出APContact中的联系人名称,然后对这个名称进行排序,但这样做的话会导致整个排序代码职能给APContact用,如何使的这个排序代码可以给所有的类的用(此类中需要有特定的属性),这时可以用到object-c的运行时特性

+(BOOL)ContainFullName:(Class)c
{
    static NSMutableDictionary *fullNameDict = nil;
    if(fullNameDict == nil)
    {
        fullNameDict = [NSMutableDictionary dictionary];
    }
    NSString *className = @(object_getClassName(c));
    NSString *fullName = fullNameDict[className];
    if(fullName == nil)
    {
        unsigned int nCount = 0;
        Ivar *ivars = class_copyIvarList(c, &nCount);
        for(int i = 0; i < nCount; i++)
        {
            Ivar ivar = ivars[i];
            NSString *varName = @(ivar_getName(ivar));
            if([varName hasPrefix:@"_"])
            {
                varName = [varName stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:@""];
            }
            if([varName isEqualToString:FULL_NAME])
            {
                fullNameDict[className] = varName;
                free(ivars);
                return YES;
            }
        }
        free(ivars);
        return NO;
    }
    else
    {
        return YES;
    }
    
}

通过ivar来查看是否有特定的属性,如果有,便获取该特性属性的值,并进行转换为拼音,然后将转换后的拼音和这个类关联并排序

+(NSArray*)letterSortedArray:(NSArray*)array
{
    NSArray *sortedArray = [NSMutableArray array];
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if([FullNameString ContainFullName:[obj class]])
        {
            NSString *name = [obj valueForKey:FULL_NAME];
            NSString *pinYinResult=[NSString string];
            NSString *regex = @"[A-Za-z]+";
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
            if ([predicate evaluateWithObject:name])
            {
                pinYinResult = [name capitalizedString];
            }
            else
            {
                for(int j=0;j<name.length;j++)
                {
                    char character = pinyinFirstLetter([name characterAtIndex:j]);
                    NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",character]uppercaseString];
                    pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
                }
            }
            
            objc_setAssociatedObject(obj, &pinyinKey, pinYinResult, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        }
    }];
    
    array = [array sortedArrayUsingFunction:sortByID context:NULL];
    
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"name:%@", [obj valueForKey:FULL_NAME]);
    }];
    return sortedArray;
}

NSInteger sortByID(id obj1, id obj2, void *context)
{
    NSString *pinYinObj1 = objc_getAssociatedObject(obj1, &pinyinKey);
    NSString *pinYinObj2 = objc_getAssociatedObject(obj2, &pinyinKey);
   
    return [pinYinObj1 compare:pinYinObj2];
}



思科—OSPF多区域配置实验 实验目的:配置OSPF多区域,使得不同网段的PC互相ping通。 网络拓扑如下: R0的配置 Router>en Router#conf t Router(config)#int g0/1 Router(config-if)#ip add 192.168.1.1 255.255.255.0 Router(config-if)#no shut Router(config-if)#exit Router(config)#int g0/0 Router(config-if)#ip add 192.168. 阅读详情

相关推荐

xilinx zynq-7000 linux下rs422串口通信测试步骤

这几天使用xilinx的zynq-7000系列调试rs422串口,期间遇到不少问题,好在最终调试完成,在这里记录一下调试步骤。 我用的soc型号是xc7z100,板载了2个rs422外设,PS端有2个uart控制器,uart0用于连接rs232并作为console控制台输出,uart1连接rs422。 rs422和主板连线原理图如下: 其中422_TXD1_3V3 和422_RXD1_3V3 为数据发送和接收引脚,422_TXD_DE1_3V3为发送使能引脚,422_RXD_REn1_...

dongyunke的博客 5907

Objective-C 的 RunTime(一):基础知识

目录RunTime 简介实例对象 && 类对象 && 元类对象成员变量 && 属性 && 方法 && 协议RunTime 消息机制 RunTime 简介 什么是 RunTime? 我们都知道,将源代码转换为可执行的程序,通常要经过 5 个步骤:预处理、编译、汇编、链接、运行。不同的编译型语言,在这 5 个步骤中所进行的操作又有些不同 C 作为一门静态语言,在编译阶段就已经确定了所有变量的数据类型,同时也确定好了要调用的函数,

Airths 的博客 735

GD32F450以太网(2-2): PHY芯片IP101GR介绍

IP101是台湾省九阳电子公司生产制造的,符合IEEE 802.3/802.3u标准单端口快速以太网收发器100Mbps和10Mbps操作,它支持自动MDI/MDIX功能,简化网络安装和减少系统维护成本。支持Auto MDI/MDIX已内置4个49.9欧的精密电阻支持中断功能支持 MII/RMII 接口超低功耗

Zhichao_Zhang的博客 1万+

Runtime入门

Runtime简介 RunTime通常被我们叫做运行时,其实就是代码在运行时的一些机制。因为Objective-C的动态特性决定了在代码运行时才能决定哪个对象调用哪个函数,对象的类型啊等等。RunTime是一套 C 实现的运行时系统,我们可以使用苹果开源的 runtime 库中的代码写一些在代码运行时才会执行的代码。俗称 黑魔法 RunTime其中最主要的是消息机制。 [NSDictionary

rainbowzxz的博客 299

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1874

手把手教你用LangChain4j打造一个“会追问”的AI客服:以航空货运下单为例

本文详细介绍了如何使用LangChain4j构建一个能够主动追问的航空货运AI客服系统。通过对话状态管理、信息缺口识别和渐进式引导等核心技术,实现高效的多轮对话交互。文章包含从交互设计到代码实现的完整指南,特别强调了提示词(Prompt)在优化AI行为中的关键作用,帮助开发者打造更智能的客服解决方案。

weixin_28731223的博客 154

iOS runtime

runtime是oc的c语言实现 objective c代码编译,先要转变为c语言,然后再进行汇编和编译的操作 将oc转化为c的,就是由runtime实现的。 下面是类、对象、方法、方法列表在c语言中的实现(删除了宏定义部分) //对象 struct objc_object { Class isa OBJC_ISA_AVAILABILITY; }; //类(也叫类对象,类在编译期间用于创...

goldfish3的博客 222

lego-loam featureAssociation 源码注释(五)

上一次我们已经看完了特征提取,这次我们进入特征匹配的内容!!!systemInitedLM的初始值为false。

Joeybee的博客 886

runtime 完整总结

类和对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系 统就像一个操作系统一样:它让...

weixin_34279579的博客 236

solidworks vba二次开发配合问题

solidworks vba二次开发配合问题二次开发装配的步骤 二次开发装配的步骤 solidworks可以使用宏录制配合过程从而得到配合的vba代码,步骤如下: 1.选择两个配合的面(点、线等) 2. 建立配合 例如将两个圆柱面同心(图中高亮): 配合后 我们看一下宏录制的代码: Sub main() //激活solidworks接口 Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc //选择两个圆柱面,注意此处是根据坐标选择,不

Alejandro123的博客 3404

Win11笔记本BIOS设置避坑大全:Secure Boot、RST、UEFI引导,一次讲清

本文详细解析了Win11笔记本BIOS设置中的关键问题,包括Secure Boot、Intel RST和UEFI引导的配置方法,帮助用户避开双系统安装中的常见陷阱。特别针对不同品牌笔记本的BIOS界面差异,提供了实用的操作指南和优化建议,确保系统兼容性和启动效率。

weixin_29251131的博客 688

Objective-C Runtime

Runtime是什么? 运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时 Runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API 平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者 Object-C需要Runtime来创建类和对象,进行消息发送和转...

baidu_40537062的博客 403

yandex 不定长旋转验证码PPOCR识别案例

可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证码的情况下,其实都是对于模型来讲,也是比较困难的哈哈,传统验证码可能小几百张就能达到很好的效果了,是因为,验证码难度比较简单,通常都是4,6位定长,但是对于模型而言,无非就是增加数据量。由于该验证码的复杂度,自己写一个rcnn或者其他模型,来优化改数据集进行训练变的尤为困难复杂,所以这里强烈推荐百度飞桨的开源模型。在得到较好的loss后,导出模型。如有侵犯,请联系作者下架。

码王吴彦祖的博客 723

Objective-C runtime机制(1)——基本数据结构:objc_object & objc_class

前言 从本篇文章开始,就进入runtime的正篇。 什么是runtime? OC是一门动态语言,与C++这种静态语言不同,静态语言的各种数据结构在编译期已经决定了,不能够被修改。而动态语言却可以使我们在程序运行期,动态的修改一个类的结构,如修改方法实现,绑定实例变量等。 OC作为动态语言,它总会想办法将静态语言在编译期决定的事情,推迟到运行期来做。所以,仅有编译器是不够的,它需要...

无忘无往 7733

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Object-c 使用objc_property_t runtime机制遍历获取类的所有属性

本文没什么分析之处,需要注意的是,递归查找父类属性,直接给出源码: #import &amp;amp;lt;Foundation/Foundation.h&amp;amp;gt; /** * 遍历所有类的block(父类) */ typedef void (^ClassesEnumeration)(Class c, BOOL *stop); @interface ClazzAttrMgr : NSObject ...

刘胡来 890

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c语言中runtime是什么错误,深入浅出Runtime (一) 什么是Runtime? 定义?

深入浅出 Runtime详解Runtime是什么?运行时(Runtime)是指将数据类型的确定由编译时推迟到了运行时Runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者Object-C需要Runtime来创建类和对象,进行消息发送...

weixin_28704239的博客 1207

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Runtime - 常用的runtime API介绍

其实也不咋常用,毕竟用runtime都少 #import <objc/runtime.h> 使用runtime之前一定要导入这个 Class object_getClass(id obj)

yokan_de_s的博客 985

runtime机制基础

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时能够更具灵活性。但是runtime会在一定程度影响到代码的结构,在平时尽量减少使用runtime机制进行编码;runtime应用的时机:(1)当需要非常高的性能开发时,使用runtime,注释:oc的代码已经无法满足性能需求; (2)当我们对系统内部的实现很好奇的时

u014588619的专栏 612

iOS开发之深入探讨runtime机制02-runtime的简单使用

runtime机制为我们提供了一系列的方法让我们可以在程序运行时动态修改类、对象中的所有属性、方法。 下面就介绍运行时一种很常见的使用方式,字典转模型。当然,你可能会说,“我用KVO直接setValuesForKeysWithDictionary: 传入一个字典一样可以快速将字典转模型啊”,但是这种方法有它的弊端,只有遍历某个模型中所有的成员变量,然后通过成员变量从字典中取出对应的值...

anyixiao9286的博客 103

使用runtime获取属性

在 YuansPerson 类中定义属性(在.h 和.m 中定义都可以) class_copyIvarList:获取类的所有属性变量,count记录变量的数量IVar是runtime声明的一个宏,是实例变量的意思,instance variable,在runtime中定义为 typedef struct objc_ivar *Ivari var_getName:将IVar...

weixin_38168484的博客 77

Cocoa Runtime学习笔记

/usr/include/objc/objc.h和runtime.h找到对class和object的定义**typedef struct objc_class *Class; //一个objc_class的指针 typedef struct objc_object { Class isa; } *id;** //id(任意对象)是一个objc_object结构类型的指针objc_clas

captainjackNO1的专栏 608

第5章:运行时相关技术特性——一、Runtime包含的内容;二、Runtime数据结构

一、Runtime包含的内容      1、Runtime数据结构      2、类对象与元类对象      3、消息传递      4、方法缓存      5、消息转发      6、Method-Swizzling      7、动态添加方法      8、动态解析方法   二、Runtime数据结构      1、Runtime基础数据结构如下 objc_object...

BlackWolfSky的博客 545

Objective-C Runtime 运行时之一:类与对象

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一个方法的实现等。 这种特性意味着Objective-C不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。对于Objective-C来说,这个运行时系统就像一个操作系统一样:它让所有的工作可以...

weixin_34088838的博客 73

OC runtime机制

概述 Objc Runtime使得C具有了面向对象能力,在程序运行时创建,检查,修改类、对象和它们的方法。Runtime是C和汇编编写的,这里http://www.opensource.apple.com/source/objc4/可以下到苹果维护的开源代码,GNU也有一个开源的runtime版本,他们都努力的保持一致。苹果官方的Runtime编程指南 Runtime函数 R...

iteye_14589的博客 104

iOS中的runtime源码简要分析(一)

首先先明确两个关键字,IMP和SEL。 在一个OC的类中有.h文件和.m文件,一般来说一个是放@interface 一个是放@implementation,和这个类似SEL就是一个函数的声明方法,而IMP就是这个方法的实现,也就是一个函数的指针 接下来我们开始进行源码分析(源码取自源码下载的当前最新版709) 在runtime中,一般使用者会引入objc/message.h文

xy371661665的博客 2778

object-c runtime 的具体应用

BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)参数:第一个为将要被运行时修改的类,第二个是加入的选择器,第三个为IMP指针,第四个为函数的参数类型。其中第三,第四参数需要解释一下,IMP 其实类似一个函数指针,可见 runtime 实际上是连接开发者与 object-c 底层的桥梁,开发者面对的是OOD,对

Nicholas.Xu.的专栏 1081
上一篇: functionWithControlPoints的参数
下一篇: UISearchBar UISearchDisplayController
github_26248951
博客等级 码龄12年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值