gpt4 book ai didi

objective-c - 自动释放溺水

转载 作者:行者123 更新时间:2023-12-03 17:44:32 25 4
gpt4 key购买 nike

我遇到了一个在自动释放池中似乎被称为“淹没”的问题。

我的代码正确创建和销毁对象。但是,我使用一些类方法在我不知情的情况下自动释放多个变量。考虑到它们每分钟循环成千上万次...我发现自己淹没在程序中丢失的数千个未释放的对象中。

2 个问题:

  1. 所以要么我根本不使用类方法 - 这是一个永久的解决方案,或者即使如此,某些实例方法(Foundation、UIKit)仍然会在我不知情的情况下自动释放对象吗?

  2. 或者我可以在调用类方法之前分配一个自动释放池,并在调用类方法之后耗尽它 - 这是一个永久的解决方案吗?

最佳答案

  1. 仅仅因为您不使用类方法并不意味着您将避免自动释放对象。例如:NSString * path = [anotherString stringByAppendingPathComponent:@"foo"]返回一个自动释放的对象,但不涉及类方法。据我所知,避免自动释放对象的唯一方法是不使用对象。如果您真的想走这条路,请查看 CoreFoundation。 (我不建议走这条路。)

  2. 如果你确实有一些疯狂的工厂方法来创建大量的自动释放池,那么我可能会这样做:

    + (id) crazyFactoryMethodWithFoo:(id)foo {  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  id returnValue = nil;  //generate gobs of autoreleased objects  returnValue = [something retain];  [pool release];  return [returnValue autorelease];}

    通过在耗尽池之前显式保留返回值,可以确保返回值在自动释放池销毁后仍然存在。然后你平衡retain通过自动释放返回值并返回它。

关于objective-c - 自动释放溺水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485331/

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