首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OC 对象分类

Objective-C中对象,简称OC对象,主要可以分为3种 instance对象(实例对象) class对象(类对象) meta-class对象(元类对象) instance instance...而instance对象在内存中存储信息包括 isa指针 成员变量值_age = 5,这个5就是存在于实例对象 Class 对象 查看以下代码中内存地址 NSObject *object1 =...objectClass1~objectClass5都是NSObjectClass对象(类对象) 它们是同一个对象,每个类在内存中只有一个Class对象 Class对象在内存中存储信息主要包括...objectWrongMetaClass); NSLog(@"%p", objectMetaClass); 0x7fff8a20f140 0x7fff8a20f140 0x7fff8a20f0f0 OC...instance对象isa指向class。 当调用对象方法时,通过instanceisa找到class,再找到对象方法进行调用。 class对象isa指向meta-class。

64881
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java:如何轻松获取当前执行法名

    在编程世界里,经常会遇到各种各样问题。有时候,需要了解当前执行法名,以便更好地调试代码或者记录日志。那么,如何在Java中轻松获取当前执行法名呢?本文将为您揭示这个神秘技巧!...一、Java方法执行上下文在Java中,每个方法都有一个与之关联执行上下文。执行上下文包含了方法调用者、被调用者、返回值等信息。要获取当前执行法名,首先需要获取到当前执行上下文。...:" + currentMethodName); }}二、使用反射获取当前执行法名除了直接从堆栈跟踪信息中获取,还可以使用Java反射机制来获取当前执行法名。...这种方法更加灵活,可以在运行时动态地获取方法名。2.1 获取目标类Class对象要使用反射获取当前执行法名,首先需要获取到目标类Class对象。...Method对象后,可以通过getName()方法来获取目标方法名

    14010

    OC类和对象

    OC中要对类进行声明,再利用类创建新对象,可以利用一个类创建多个对象。...函数在声明之后还要实现函数,这样函数才能被主函数中创建对象调用。OC将类声明和函数实现分别放在了.h和.m这两个文件中,显得更加有条例性。...2.函数声明:-(返回值类型) 方法名;,函数名后面如果还有参数要加冒号:,后面紧跟参数类型和参数名,如(NSString *)name。   函数实现:-(返回值类型) 方法名{}。...3.无论是方法名还是成员变量命名都要遵循驼峰标识。 切记在写主函数时候一定要首先引入头文件,即.h文件。OC引入用#import。...OC中不管是对象创建还是函数调用都要用中括号括起来。 第一天学习OC也是第一天开始写学习东西,写可能比较乱,思路不是很清晰,东一棒子,西一榔头,但我会继续努力,不断改进

    96860

    利用反射根据方法名执行方法使用示例

    其中一个非常重要方法就是在学了了利用java反射根据参数名执行对应方法,经过一早上修改,基本完成了对代码封装这里并没有将前两个方法封装在一起,原因有很多,这里就不说了。...下面是优化后执行单个接口所有测试用例方法: // 发帖话题分类接口 001 public void case_shequ_topic_cattlist() { String apiName...= "shequ_topic_cattlist"; mark = getMark(); executeCase(apiName, mark); } 下面是优化后执行一个接口单个用例方法:...> c = Class.forName("juziyule.Special_juzi"); obj = c.newInstance(); // 第一个参数写是方法名,第二个\第三个\......写是方法参数列表中参数类型 method = c.getMethod(apiName, Map.class); // invoke是执行该方法,并携带参数值 } catch (Exception

    63160

    iOS OC 对象内存对齐原则

    问题引入 初始化一个 OC 类,具有如下属性: #import NS_ASSUME_NONNULL_BEGIN @interface LGTeacher...,并获取对象内存 size: LGTeacher *p = [[LGTeacher alloc] init]; p.name = @"LG_Cooci"; p.age = 18; p.height...由以上打印结果可以看出 class_getInstanceSize 和 malloc_size 获取到内存大小不一样,那么是什么导致两者获取同一对象内存大小不一样呢?我们下一步继续探索。...首先我们先手动计算一下这个对象所占内存: isa -- 8字节 name -- 8字节 age -- 4字节 height -- 8字节 hobby -- 8字节 总计 36 字节。...由以上可以知道对象申请内存大小和系统开辟大小存在不一致情况,8 字节对齐应用于对象属性,16 字节对齐应用于对象,由于对象内存是连续,这样可以规避一些不必要风险,以空间换时间来得到更高安全性

    55130

    OC基础关联对象AssociationObject如何保存

    主要分析在runtime中关联对象操作是如何实现,数据对象时如何保存及关联对象释放。...包含有一个多线程操作锁和AssociationsHashMap表。 AssociationsHashMap 保存对象地址(一个类对象)和这个类全部关联对象hash table....old_association = j->second; 获取j对象第二个数据,也就是ObjcAssociation对象。...关联对象释放: 根据关联对象存储结构我们可以知道,如果要释放一个对象关联对象也需要从hash 表中一层一层给找出来,依次释放。释放操作是在被关联对象释放时进行。...总结 以上皆为runtime关联对象如何保存分析总结,可能有理解不到位地方,还在研究中。

    73010

    iOS与JS交互

    总结看来,间接实现方式有4种: 1. 在代理方法拦截Url,识别判断 2. Block传值,实现JS调用OC 3. 模型实现,JS直接用oc法名来调用oc方法 4....使用第三工具类:WebViewJavascriptBridge 下面就来简单介绍一下上述方法简单实用 1.在代理方法拦截Url,识别判断 这种方法原理很简单,UIWebView界面响应会调起下面的代理方法...webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //sayHello就是js法名称...方法,即实现了JS对于OC调用 [weakSelf printInfo:objString]; } }; } 3.模型实现,JS直接用oc法名来调用...oc方法 这种方法优点在于,JS可以直接用oc法名来调用oc方法,这样就类似于安卓addJavaScriptInterface方法,在使用此方法时仍然要导入JavaScriptCore //第一步

    4.1K70

    python使用execjs执行含有window等对象js代码

    当我们分析爬虫时,有时候会遇到一些加密参数,这个时候就需要我们逆向分析js python执行js有一些第三库 所以我们只要在对应js代码里最前面加上以下代码就能正常运行 const jsdom =...dom.window; document = window.document; XMLHttpRequest = window.XMLHttpRequest; 在全局安装jsdom后,在node里按上面的写法是没有问题,..._exceptions.ProgramError: Error: Cannot find module 'jsdom' 解决办法有两种 1.就是在python执行文件所在运行目录下,使用npm安装jsdom...使用cwd参数,指定模块所在目录,比如,我们在全局安装jsdom,在cmd里通过npm root -g 可以查看全局模块安装路径: C:\Users\w001\AppData\Roaming\npm...\node_modules 我们使用时,代码可以按下面的写法写 import execjs with open(r'要运行.js','r',encoding='utf-8') as f: js

    2.9K30

    iOS底层—OC对象本质与isa

    我们已经学习了对象初始化、内存对齐等内容。这篇文章将深入学习探究对象本质、对isa进行分析。 学习对象本质之前,先引入一个工具clang。...2.clang作用 那么clang应该学习什么呢?做什么呢? 因为OC是C、C++超集,通过clang可以将m文件编译成cpp文件,这样我们可以了解更多关于底层实现原理。...执行指令后,即可编译生成一个main.cpp文件。...,也就是isa;另一个成员变量是_name,也就是GFPerson属性,和OC层面定义是一致。...对象本质总结 通过工具clang,编译生成cpp文件,我们可以发现,对象实质是一个结构体。在OC层,NSObject是大多数类根类,而objc_object可以理解为就是c\c++层面的根类。

    54810

    iOS底层原理总结 - 探寻OC对象本质

    iOS底层原理总结 - 探寻OC对象本质 对小码哥底层班视频学习总结与记录。面试题部分,通过对面试题分析探索问题本质内容。 面试题:一个NSObject对象占用多少内存?...探寻OC对象本质,我们平时编写Objective-C代码,底层实现其实都是C\C++代码。 ? OC代码转化过程 OC对象结构都是通过基础C\C++结构体实现。...我们通过创建OC文件及对象,并将OC文件转化为C++文件来探寻OC对象本质 OC如下代码 #import int main(int argc, const...思考: 一个OC对象在内存中是如何布局。...OC对象分类 面试题:OC类信息存放在哪里。 面试题:对象isa指针指向哪里。

    1.2K50

    React Native和原生app通信机制详解

    JS脚本,并且可以获取执行返回值,这个返回值就相当于JSOC传递信息。...从发起调用到执行回调总共有11个步骤: JS端调用某个OC模块暴露出来方法。...在初始化时模块配置表上每一个模块都生成了对应remoteModule对象对象里也生成了跟模块配置表里一一对应方法,这些方法里可以拿到自身模块名,方法名,并对callback进行一些处理,再移交给...实际上模块配置表已经经过处理了,跟JS一样,在初始化时OC也对模块配置表上每一个模块生成了对应实例并缓存起来,模块上每一个方法也都生成了对应RCTModuleMethod对象,这里通过ModuleID...JS不会主动传递数据给OC,在调OC方法时,会在上述第4步把ModuleID,MethodID等数据加到一个队列里,等OC过来调JS任意方法时,再把这个队列返回给OC,此时OC执行这个队列里要调用方法

    1.3K80

    React Native和原生app通信机制详解

    JS脚本,并且可以获取执行返回值,这个返回值就相当于JSOC传递信息。...从发起调用到执行回调总共有11个步骤: JS端调用某个OC模块暴露出来方法。...在初始化时模块配置表上每一个模块都生成了对应remoteModule对象对象里也生成了跟模块配置表里一一对应方法,这些方法里可以拿到自身模块名,方法名,并对callback进行一些处理,再移交给...实际上模块配置表已经经过处理了,跟JS一样,在初始化时OC也对模块配置表上每一个模块生成了对应实例并缓存起来,模块上每一个方法也都生成了对应RCTModuleMethod对象,这里通过ModuleID...JS不会主动传递数据给OC,在调OC方法时,会在上述第4步把ModuleID,MethodID等数据加到一个队列里,等OC过来调JS任意方法时,再把这个队列返回给OC,此时OC执行这个队列里要调用方法

    1.5K80

    JSPatch 实现原理详解

    所以做了一个复杂事,就是在require生成类对象时,把类名传入OCOC 通过runtime方法找出这个类所有的方法返回给 JSJS对象为每个方法名都生成一个函数,函数内容就是拿着方法名OC...最后解决方案是,在 OC 执行 JS 脚本前,通过正则把所有方法调用都改成调用 __c() 函数,再执行这个 JS 脚本,做到了类似 OC/Lua/Ruby 等消息转发机制: UIView.alloc...传回给 JS 变量是这个 OC 对象指针,这个指针也可以重新传回 OC,要在 JS 调用这个对象某个实例方法,根据第2点 JS 接口描述,只需在 __c() 函数里把这个对象指针以及它要调用法名传回给...5.类型转换 JS 把要调用类名/方法名/对象传给 OC 后,OC 调用类/对象相应方法是通过 NSInvocation 实现,要能顺利调用到方法并取得返回值,要做两件事: a.取得要调用 OC...现在 defineClass 定义方法会经过 JS 包装,变成一个包含参数个数和方法实体数组传给OCOC会判断如果方法已存在,就执行替换操作,若不存在,就调用 class_addMethod()

    3.5K80
    领券