gpt4 book ai didi

iphone - 自动释放或之后立即释放哪个更好?

转载 作者:行者123 更新时间:2023-12-03 18:31:50 27 4
gpt4 key购买 nike

在很多情况下,人们会分配一个实例,并在将其分配给其他实例后立即释放它,而其他实例会在内部保留它。

例如,

UIView *view = [[UIView alloc] initWithFrame...];[self addSubView:view];[view release];

我听到有人建议我们使用自动释放,而不是在之后立即释放。

所以上面变成:

UIView *view = [[[UIView alloc] initWithFrame...] autorelease];[self addSubView:view];

这里的最佳实践是什么?优点和缺点?

最佳答案

在大多数情况下,这两种方式都不重要。由于 -autorelease 只是意味着该对象将在运行循环的当前迭代结束时被释放,因此无论哪种方式该对象都会被释放。

使用-autorelease的最大好处是您不必担心方法上下文中对象的生命周期。因此,如果您稍后决定在上次使用某个对象几行后对其执行某些操作,则无需担心将调用移至 -release

使用 -release 与使用 -autorelease 相比,主要实例是如果您创建大量方法中的临时对象。例如,考虑以下方法:

- (void)someMethod {
NSUInteger i = 0;
while (i < 100000) {
id tempObject = [[[SomeClass alloc] init] autorelease];

// Do something with tempObject

i++;
}
}

当该方法结束时,自动释放池中已有 100,000 个对象等待释放。根据 tempObject 的类,这可能是也可能不是桌面上的主要问题,但在内存有限的 iPhone 上肯定会出现这种情况。因此,如果您要分配许多临时对象,您确实应该使用 -release 而不是 -autorelease。但是,对于许多/大多数用途,您不会看到两者之间有任何重大差异。

关于iphone - 自动释放或之后立即释放哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283324/

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