iphone - 内存管理和性能

标签 iphone

如果我在方法“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/

相关文章:

ios - 智能排序 Localized.strings 文件

iPhone地址簿保存联系人的链接

iphone - 快速进行 View 转换 - 你使用这个 hack 吗?

iphone - NSDictionary allKeys - 它总是返回相同的顺序吗?

ios - iPhone 应用内购买商店工具包错误-1003 "Cannot connect to iTunes Store"

iphone - 如何在我的应用程序中使用实现 iAd?

iphone - 我应该查看多大的文件?国际音标?

ios - 当用户选择 "Play Tutorial Again"时,从应用内设置再次播放 iOS 应用内教程

iphone - 仪器 .trace 文件问题

iphone - iTunes Connect 提示 "missing localized screenshot"尽管 iPhone 5 截图已经上传