iOS基础知识3
来源:互联网 发布:服装店记账软件手机 编辑:程序博客网 时间:2024/06/06 02:25
一、Runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法)
每一个类对象中都一个方法列表,方法列表中记录着方法的名称、方法实现、以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应的方法实现。
二、使用Runtime Associate方法关联的对象,需要在主对象dealloc的时候释放么?
objc_setAssociatedObject(self, @selector(associatedObject), object, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
最后这个参数有如下几个:OBJC_ASSOCIATION_ASSIGNOBJC_ASSOCIATION_RETAIN_NONATOMICOBJC_ASSOCIATION_COPY_NONATOMICOBJC_ASSOCIATION_RETAINOBJC_ASSOCIATION_COPY
无论ARC或MRC,根据我们的具体需要设置,都不需要在主对象dealloc的时候释放。三、objc中的类方法和实例方法有什么本质区别和联系?
类方法:
1、类方法是属于类对象
2、类方法只能通过类对象调用
3、类方法中的self是类对象
4、类方法可以调用其他的类方法
5、类方法中不能访问成员变量
6、类方法中不能直接调用对象方法
7、类方法是存储在元类对象的方法缓存中
实例方法:
1、实例方法是属于实例对象
2、实例方法只能通过实例对象调用
3、实例方法中的self是实例对象
4、实例方法中可以访问成员变量
5、实例方法中直接调用实例方法
6、实例方法中可以调用类方法(通过类名)
7、实例方法是存储在类对象的方法缓存中
四、_objc_msgForward函数是做什么的?直接调用它会发生什么?
_objc_msgForward是用于消息转发的,当向一个对象发送一条消息,这个对象并没有实现的时候,_objc_msgForward会尝试做消息转发。
直接调用_objc_msgForward很危险,如果用不好会导致程序crash,用的好很棒。
JSPatch就是直接调用_objc_msgForward来实现其核心功能
五、Runtime如何实现weak变量的自动置nil?
因为编译后的类已经注册在Runtime中,类结构体中的objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,同时Runtime会调用class_setIvarLayout或class_setWeakIvarLayout来处理strong、weak引用,所以不能向存在的类中添加实例变量。
运行时创建的类是可以添加实例变量,调用 class_addIvar 函数。但是得在调用objc_allocateClassPair之后objc_registerClassPair之前,原因同上。
- iOS基础知识3
- iOS 基础知识
- iOS基础知识
- IOS基础知识
- ios基础知识
- ios基础知识
- IOS基础知识
- ios基础知识
- IOS基础知识
- iOS 基础知识
- IOS-基础知识
- ios基础知识
- iOS基础知识
- iOS基础知识
- IOS开发基础知识要点
- ios开发一些基础知识
- ios 内存管理基础知识
- iOS的一些基础知识
- Android:控件WebView显示网页
- jdk+tomcat8+配置HTTPS访问+maven (centos7)
- 初识人工智能--第一节机器学习
- Android手势检测——GestureDetector全面分析
- 多线程笔记
- iOS基础知识3
- 二叉树
- 买单侠任浩军:微服务API级权限的技术架构
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
- git 学习笔记
- 分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket
- Strange Printer (leetcode)
- activiti学习--11接受任务活动
- 【Spring Security实战系列】Spring Security实战(三)