gpt4 book ai didi

iphone - 这两个init方法有什么区别?

转载 作者:行者123 更新时间:2023-12-03 20:50:04 25 4
gpt4 key购买 nike

据我所知,第一个在完成后必须释放,而第二个则不需要。为什么要使用第一个初始化而不是第二个?

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"title", @"text", nil];

还有

NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"title", @"text", nil];

最佳答案

正如其他人所说,在某种意义上,您的两个示例之间没有区别,只是第一个返回一个保留的对象,在您显式释放它之前该对象不会被释放,第二个是一个自动释放的对象除非您在此之前显式保留它,否则它将在下一个运行循环开始时自动释放。

但是您问题的关键部分是:

Why would you use the first initialization over the second?

普遍认为的方法(Apple 文档支持)是在大多数情况下使用自动释放的对象绝对没问题。我不同意 Peter Lewis 的观点,即 iPhone 是如此“动力不足”,以至于你需要避免自动释放的对象。在大多数应用程序中提供自动释放对象时,手机上的额外开销是微乎其微的。因此,您可以在代码中随意使用自动释放的对象,如果需要保留它们,只需显式保留它们即可。

但是,它确实发挥作用的是紧密循环。例如,如果您正在运行一个执行 1000 次的 while 循环,并且您在该循环中创建了以后不再需要的对象,那么您应该显式创建新的非自动释放对象并显式释放它们。这是因为自动释放池在紧密循环内不会(默认情况下)为空。创建大量自动释放的对象很可能会开始达到设备内存的限制。

总而言之;大多数时候使用 2),但如果您要一次创建和放弃大量对象,请使用 1)。

希望有帮助

关于iphone - 这两个init方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285025/

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