gpt4 book ai didi

iphone - 内存管理和性能

转载 作者:行者123 更新时间:2023-12-03 20:17:13 24 4
gpt4 key购买 nike

如果我在方法“getASprocket”中分配一个对象并以这种方式调用它,这里会出现泄漏吗?

Sprocket *sprock = [Sprocket getASprocket];

// store this returned value as an ivar
ivarSprock = [sprock retain];

// release the originally acquired object
[sprock release];

Sprocket 对象的分配和返回方式如下:

– (Sprocket *)getASprocket {
Sprocket *sprocket;

sprocket = [[Sprocket alloc] init];

return [sprocket retain];
}

此外,将“aSprocket”方法内的 '[sprocket keep];' 更改为 'return [sprocket autorelease];' 是否会导致性能下降?

最佳答案

请参阅这个很好的解释页面Especially sub-page #7

每个retain创建了另一个内存对象。让我们看看我们有什么:
getASprocket中:

sprocket = [[Sprocket alloc] init];

+1

return [sprocket retain];

+1

以及您的方法:

ivarSprock = [sprock retain];

+1

[sprock release];

-1

我们应该做什么?好吧,我们应该通过使其自动释放来释放 Sprock:

  return [[[Sprocket alloc] init] autorelease]

或者用上面引用的链接的话来说:

In most cases, the setter for an instance variable should just autorelease the old object, and retain the new one. You then just make sure to release it in dealloc as well.

关于iphone - 内存管理和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295954/

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