gpt4 book ai didi

ios - CALayer 使用 ARC 导致内存泄漏

转载 作者:行者123 更新时间:2023-11-28 19:27:04 26 4
gpt4 key购买 nike

我花了一段时间来理解我的代码中的一些大内存泄漏,所以在简化代码之后剩下的是:

@interface TestLayer: CALayer
@end
@implementation TestLayer
-(void)dealloc
{
NSLog(@"dealloc called");
}
@end

@implementation AppDelegate
#define ENABLE_LEAK 1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
for (int i=0; i<10; i++) {
@autoreleasepool {
TestLayer* test = [TestLayer layer];
#if ENABLE_LEAK
CALayer* l = [CALayer layer];
[test addSublayer:l];
[l removeFromSuperlayer];
l = nil;
#endif
test = nil;
}
}
return YES;
}
.....

如果 ENABLE_LEAK 设置为 0,TestLayer 中的 dealloc 将被正确调用 10 次。但是,如果在 TestLayer 中将其设置为 1 dealloc,则在此之前不会调用应用程序:didFinishLaunchingWithOptions:返回。实际上只是调用 [test setNeedsLayout];不添加任何子层会导致 TestLayer 泄漏。

我正在使用类似的代码来生成一些离线内容,不会用于最终应用程序,它只会使用预生成的离线内容。

有人知道什么在引用我的 TestLayer 吗?我怎样才能说服它发布它?

最佳答案

正如 Cristi 在其中一条评论中建议的那样,我所有关于内存泄漏CALayer 的问题都通过使用 CATransaction 解决了.flush()

它就像一个魅力 🤩

关于ios - CALayer 使用 ARC 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164869/

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