2012-08-07 13 views
0
NSString *string=[temp objectAtIndex:row]; 
    [temp removeObjectAtIndex:row]; 

从中string创建不再存在的对象;我认为这个语法是直接赋值的,因此string应该不再存在了,对吧?这个NSString不再存在吗?

因此,无论我用stringWithFormat从对象创建一个新的字符串,或发送retainstring是安全的,这是正确的推理?

回答

2

假如你不使用ARC或垃圾收集,是的,你对对象的内存管理的推理是正确的†。但是,您不想使用stringWithFormat:。这需要一个格式化字符串,如果你传递了一个并非特意的东西,它可能会失败。你可以使用一个:

  • stringWithString:如果你不想拥有

  • copy如果你只是想确保你有一个安全的参考字符串(任选autorelease如果你不” t计划保持长期参考)

  • retain如果您一定要保留相同的对象 - 即使它是一个可变字符串 - 并且希望拥有所有权(您可能不希望此选项,因为与主要区别是该字符串可能会发生变异,你的下面)

†通过“正确的”,我的意思是你是对的,你不应该承担约超出该点对象的生命周期的任何东西。它可能还活着,但从技术上讲,这不是一个安全的假设。认为值得一提,因为有些人在这一点上并不是100%清楚。