gpt4 book ai didi

具有弱 self 的 Objective-C 宏

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:29 25 4
gpt4 key购买 nike

我有一个执行出色日志的宏。但是,它不能在 self 拥有的 block 中使用,因为它会形成一个保留循环。

很棒的日志:

#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 在这里被弱引用?

最佳答案

尝试使用@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");
};
}

关于具有弱 self 的 Objective-C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24686930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com