Tencent / MLeaksFinder

Find memory leaks in your iOS app at develop time.
Other
5.42k stars 935 forks source link

cocoapods环境下的宏定义 #48

Open menghuanqi opened 7 years ago

menghuanqi commented 7 years ago

在cocoapods环境下想运行非cocooapods的代码,我把NSObject+MemoryLeak.h文件的宏注释掉了,还是不运行,请问判断是否是cocoapods环境的宏是怎么定义的?

Zepo commented 7 years ago

不大懂你的意思,你只需关心 //#define MEMORY_LEAKS_FINDER_ENABLED 0 这个宏,用它来开关泄漏检测即可。

menghuanqi commented 7 years ago

你好,我写了一个demo1,不支持cocoapods环境的,直接把MLeakerFinder拖进来了,程序就能运行,我写了一个demo2,它是支持cocoapods环境的,就是装各种第三方(如:AFNetworking)用cocoapods即可,但是demo2里面我不想用cocoapods装MLeakerFinder,也想直接拖进来用,把#define _INTERNAL_MLF_RC_ENABLED COCOAPODS 改了一下,又把需要的 FBMemoryProfiler 拖进来,改了各种报错,发现demo2不运行MLeakerFinder的代码

Zepo commented 7 years ago

把 //#define MEMORY_LEAKS_FINDER_RETAIN_CYCLE_ENABLED 0 改成 #define MEMORY_LEAKS_FINDER_RETAIN_CYCLE_ENABLED 1 即可

menghuanqi commented 7 years ago

把 //#define MEMORY_LEAKS_FINDER_RETAIN_CYCLE_ENABLED 1 改成 #define MEMORY_LEAKS_FINDER_RETAIN_CYCLE_ENABLED 1 给+load方法打了断点,依然不走代码

Zepo commented 7 years ago

如果是把 MLeaksFinder 做为子工程,需要在主工程的 Build Settings -> Other Linker Flags 加上 -ObjC,如果不是做为子工程,而是直接加代码不进 +load 方法的,就要查一下原因了。

menghuanqi commented 7 years ago

我想用UISwitch开关来控制泄露检测,有可行性么?

Zepo commented 7 years ago

那就需要自己改代码了,比如说如果关了的话,就在 NSObject+MemoryLeak 的 - (BOOL)willDealloc 一开始直接 return NO

menghuanqi commented 7 years ago

可是+load方法是必须运行的,开关开的时候return yes,开关关的时候return no, load方法早就运行过了,

Zepo commented 7 years ago

你要在运行时动态的开关 MLeaksFinder,那么 load 方法是一定要的,load 方法里做的就是 hook 掉 pop 那些方法,你要在后期再通过 uiswitch 的开关来 hook 方法就麻烦了