我有一个执行令人敬畏的日志的宏。但是,它不能在self
拥有的块中使用,因为它将形成保留周期。
令人敬畏的日志:
#define AWESOME_LOG(__FORMAT__, ...) ALog((@"%p %s:%d " __FORMAT__), self, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
不那么棒的保留周期:
- (void)someMethod:(BOOL)awesome
{
self.dumbBlock = ^{
AWESOME_LOG(@"Is this awesome? %@", awesome ? @"Yes" : @"No");
};
}
是否有任何预处理器巫毒可以确保self
在这里被弱引用?
答案 0 :(得分:2)
尝试使用@ weakify / @ strongify。它创建了一个新的弱/强引用,可以隐藏self
。
http://blog.aceontech.com/post/111694918560/weakifyself-a-more-elegant-solution-to
- (void)someMethod:(BOOL)awesome {
@weakify(self);
self.dumbBlock = ^{
@strongify(self);
AWESOME_LOG(@"Is this awesome? %@", awesome ? @"Yes" : @"No");
};
}