
runtime
文章平均质量分 88
dechaos
这个作者很懒,什么都没留下…
展开
-
ObjC如何通过runtime修改Ivar的内存管理方式(三)
第二次尝试到了这里,我们已经完全搞清楚了 oc 是如何管理assign和weak对象的了,如果你有兴趣也可以去自己尝试破解strong的实现机制,原理一样。接下来我们决定开始对 MCAssignToWeak 进行第二次修改的尝试,这一次,我们需要加入对 delegate 属性的 setter 和 getter 的替换,使之调用正确的方法存取成员变量。@implementation MCAssignT原创 2017-07-24 19:37:23 · 667 阅读 · 0 评论 -
ObjC如何通过runtime修改Ivar的内存管理方式(二)
是否能够在运行时修改 Ivar Layout?虽然我们已经破译了 oc runtime 如何存储变量的内存修饰符的秘密,但是我们是否能够在运行时通过修改 Ivar Layout 的方式来改变变量的内存管理方式呢?例如 assgin 变为 weak ?仔细推敲[Objective-C Class Ivar Layout 探索][6]的细节后,我们不难得出一个简单直接的办法——调用 class_setI原创 2017-07-21 17:31:58 · 684 阅读 · 0 评论 -
ObjC如何通过runtime修改Ivar的内存管理方式(一)
为什么要这么做?在iOS 9之前,UITableView(或者更确切的说是 UIScrollView)有一个众所周知的问题:@property (nonatomic, assign) id delegate;苹果将 delegate 的内存修饰符声明为了assign,这是 MRC 时代防止循环引用的不二法门。但是到了 ARC 时代,苹果引入了弱引用修饰符(weak)对原先的(assign)暨非强引用原创 2017-07-20 11:31:38 · 701 阅读 · 0 评论