0

以下两行之间的内存角度是否有任何区别

NSString *dbFilePath =[[NSString alloc]initWithString:[[NSBundle mainBundle] pathForResource:dbName ofType:nil]];

  NSString *dbFilePath =[[[NSBundle mainBundle] pathForResource:dbName ofType:nil] retain]; 

"[NSString alloc]initWithString:" 或者只是 "retain"

提前致谢

4

1 回答 1

2

实际上,没有区别。但是,在第一种情况下,您暂时NSString比第二种情况多一个对象,即返回的对象pathForResource将在不久后自动释放,并且它是幸存的副本。

在第二种情况下,不制作副本。pathForResource而是直接保留返回的对象。高峰期少一个对象。

我发现第二段代码更直接。

但是,我想知道为什么您保留从堆栈中引用的东西。我希望dbFilePath改为更持久的东西,比如成员变量。

于 2013-01-06T06:10:41.860 回答