objective-c – 在Cocoa中使用autorelease的成本是多少?

objective-c – 在Cocoa中使用autorelease的成本是多少?,第1张

概述大多数苹果文档似乎避免使用自动释放的对象,特别是在创建gui视图时,但是我想知道使用自动释放对象的成本是多少? UIScrollView *timeline = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20, 320, 34)];[self addSubview:timeline];[timeline release]; 最终我应该使 大多数苹果文档似乎避免使用自动释放的对象,特别是在创建gui视图时,但是我想知道使用自动释放对象的成本是多少?

UIScrollVIEw *timeline = [[UIScrollVIEw alloc] initWithFrame:CGRectMake(0,20,320,34)];[self addSubvIEw:timeline];[timeline release];

最终我应该使用一个策略,其中一切都是自动释放的,并且使用保留/释放应该是特定情况的规则的例外?或者我应该通常使用retain / release,autorelease是从[Nsstring stringWithEtc …]等便利方法返回的对象的异常.

解决方法 有两项费用:

(假设你有一个选项来避免自动释放的对象.)你有效地不必要地延长了对象的生命周期.这可能意味着您的内存占用将不必要地增长.在受限制的平台上,这可能意味着如果应用程序超出限制,则终止应用程序.即使您没有超出限制,也可能导致您的系统开始交换,这是非常低效的.
>查找当前自动释放池的额外开销,向其添加自动释放的对象,然后在结束时释放对象(额外的方法调用).这可能不是一个很大的开销,但它可以相加.

任何平台上的最佳做法是尽量避免自动释放,如果可以的话.

回答问题:

ultimately should I use a strategy where everything is autoreleased and using retain/release should be the exception to the rule for specific cases?

恰恰相反.

Or should I generally be using retain/release with autorelease being the exception for returned objects from convenIEnce methods like [Nsstring stringWithEtc…] ?

您应该始终使用retain / release,如果可以 – 在Nsstring的情况下,通常不需要使用stringWithEtc方法,因为存在initWithEtc等效项.

参见this question.

总结

以上是内存溢出为你收集整理的objective-c – 在Cocoa中使用autorelease的成本是多少?全部内容,希望文章能够帮你解决objective-c – 在Cocoa中使用autorelease的成本是多少?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1025492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存