宏观捕获自我块

Ben*_*ter 7 macros weak-references self ios

我有下面的宏的问题,我用它来记录各种信息

#define JELogVerbose(fmt, ...)  
DDLogVerbose((@"%@ %@ - " fmt), NSStringFromClass([self class]),
                                NSStringFromSelector(_cmd), ##__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

当在内部使用这个最终宏时会出现问题,它显然会强烈捕获自身,这可能是有问题的.

以下是解决方案的一些要求:

  1. 它可以是一个多行宏,您可以在其中定义weakSelf但不能解决它,因为您可以重新定义您创建的__weak指针.
  2. 使用__FILE____PRETTY_FUNCTION__因为它们捕获将捕获超类而不是子类.因此,对于用于创建许多实例的类的抽象,日志记录不区分每个实例.捕获当前类是绝对必要的
  3. 该解决方案只需要修改宏或其他一些全局配置选项来修复此问题,而无需添加额外的扩展库

小智 1

也许使用这个: https: //github.com/jspahrsummers/libextobjc

#import "EXTScope.h"

/* some code */

@weakify(self);
[SomeClass runOnBackgroundCode:^{
    @strongify(self);
    /* do something */
}];

/* some code */
Run Code Online (Sandbox Code Playgroud)

我使用这个解决方案已经有一段时间了——不需要添加 weekSelf 或其他任何东西。