大多数苹果文档似乎都避免使用自动释放对象,特别是在创建 gui 视图时,但我想知道使用自动释放对象的成本是多少?
UIScrollView *timeline = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 20, 320, 34)];
[self addSubview:timeline];
[timeline release];
最终我应该使用一种策略,其中所有内容都是自动释放的,并且使用保留/释放应该是特定情况下规则的例外?或者我通常应该使用保留/释放,而自动释放是从 [NSString stringWithEtc...] 等便捷方法返回的对象的例外?
有两个成本:
(假设您可以选择避免自动释放对象。)您实际上不必要地延长了对象的生命周期。这可能意味着您的内存占用量会不必要地增加。在受限平台上,这可能意味着如果超过限制,您的应用程序将被终止。即使您没有超出限制,也可能会导致您的系统开始交换,这是非常低效的。
查找当前自动释放池、向其中添加自动释放对象、然后在最后释放该对象(额外的方法调用)的额外开销。这可能不是一个很大的开销,但它会增加。
任何平台上的最佳实践是尽可能避免自动释放。
回答问题:
最终我应该使用一种策略,其中所有内容都是自动释放的,并且使用保留/释放应该是特定情况下规则的例外?
恰恰相反。
或者我通常应该使用保留/释放,而自动释放是从 [NSString stringWithEtc...] 等便捷方法返回的对象的例外?
你应该always如果可以的话,使用保留/释放——在这种情况下NSString
通常不需要使用stringWithEtc
方法有initWithEtc
等价物。
也可以看看这个问题 https://stackoverflow.com/questions/155964/what-are-best-practices-that-you-use-when-writing-objective-c-and-cocoa#175874.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)