美文网首页
Category中实现交换本类dealloc方法

Category中实现交换本类dealloc方法

作者: ANTI_JAM | 来源:发表于2017-07-26 10:40 被阅读218次

项目中不恰当使用某个三方依赖导致了内存问题,想通过查看库中某对象的init和dealloc的具体结果,但是又不能使用@selector()获取dealloc方法,error是ARC禁止这么做。

但发现还有其他办法可以获取到原本的dealloc方法,以下是具体操作:

Method originalDealloc = class_getInstanceMethod(self, NSSelectorFromString(@"dealloc"));

Method swizzledDealloc = class_getInstanceMethod(self, @selector(ac_dealloc));

method_exchangeImplementations(originalDealloc, swizzledDealloc);

- (void)ac_dealloc {

[self ac_dealloc];

NSLog(@"buffer dealloc:%@",self);

}

但个人认为此操作可能会导致上架审核出现问题,因此最好只是用作调试。


更正:交换方法中添加的自定义操作一定要在[self ac_dealloc]之前。

- (void)ac_dealloc {

//do something

NSLog(@"buffer dealloc:%@",self);

[self ac_dealloc];

}


补充:

如果想完全重写本类的dealloc方法的话,直接在分类中重写dealloc,这样的话在这个类的对象释放时只会走分类中重写的dealloc方法,而不会走本类中的dealloc。

如果想在本类中的dealloc方法实现的内容的基础上添加内容,那就要使用上方“更正”中的代码所示的写法。

相关文章

  • Category中实现交换本类dealloc方法

    项目中不恰当使用某个三方依赖导致了内存问题,想通过查看库中某对象的init和dealloc的具体结果,但是又不能使...

  • 04-Category(分类)/Extension(匿名分类/类

    一、Category 1、Category的基本使用 2、Category的实现原理 分类中的对象方法、类方法、协...

  • 知识点34:运行时之动态添加方法(在本类中添加)

    1.动态添加方法在本类实现,而交换方法和动态添加属性在分类中实现 开发使用场景:如果一个类方法非常多,加载类到内存...

  • Hook一些细节

    1.class_addMethod这个方法的实现会覆盖父类的方法实现,但不会取代本类中已存在的实现。如果本类中包含...

  • 聊一聊Category

    Category的实现原理 Category中对象方法,在程序运行过程中,都会进入类的对象方法列表中。实例变量都是...

  • Category Super调用父类方法

    Category中是无法使用Super调用父类方法的,因为Category只是为该类增加方法,并没有实现继承,所以...

  • OC 多个 category 重写同一方法覆盖的规律?

    OC 提供的 category 机制会用 category 实现的重写方法覆盖原对象的方法实现, 因为 categ...

  • category

    category结构体 从category的定义可以看出category可以添加实例方法,类方法,实现协议,添加属...

  • iOS MRC dealloc

    dealloc是个特殊的方法,Objective-C会在对象销毁前调用该方法。需要为每个自定义类实现dealloc方法。

  • iOS-监听键盘高度变化

    1.注册监听键盘弹出和收起的通知 方法实现 3.dealloc中移除通知

网友评论

      本文标题:Category中实现交换本类dealloc方法

      本文链接:https://www.haomeiwen.com/subject/tjunkxtx.html