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

從中string創建不再存在的對象;我認爲這個語法是直接賦值的,因此string應該不再存在了,對吧?這個NSString不再存在嗎?

因此,無論我用stringWithFormat從對象創建一個新的字符串,或發送retainstring是安全的,這是正確的推理?

回答

2

假如你不使用ARC或垃圾收集,是的,你對對象的內存管理的推理是正確的†。但是,您不想使用stringWithFormat:。這需要一個格式化字符串,如果你傳遞了一個並非特意的東西,它可能會失敗。你可以使用一個:

  • stringWithString:如果你不想擁有

  • copy如果你只是想確保你有一個安全的參考字符串(任選autorelease如果你不」 t計劃保持長期參考)

  • retain如果您一定要保留相同的對象 - 即使它是一個可變字符串 - 並且希望擁有所有權(您可能不希望此選項,因爲與主要區別是該字符串可能會發生變異,你的下面)

†通過「正確的」,我的意思是你是對的,你不應該承擔約超出該點對象的生命週期的任何東西。它可能還活着,但從技術上講,這不是一個安全的假設。認爲值得一提,因爲有些人在這一點上並不是100%清楚。