Alloc initWithString vs retain

时间:2013-01-06 05:50:56

标签: objective-c ios memory-management

以下两行

之间的存储角度是否有任何区别

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

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

“[NSString alloc] initWithString:”或只是“保留”

提前致谢

1 个答案:

答案 0 :(得分:2)

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

在第二种情况下,不进行复制。而是由pathForResource返回的对象直接保留。在高峰时间减少一个物体。

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

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