2011-08-25 53 views
3

一個哲學問題,各種各樣。將一個常量字符串分配給(保留的)@property是否正確?或者,我應該做self.string = [NSString stringWithString:@""];在@property上分配self.string = @「」是(保留)'d正確嗎?

是否有內存泄漏?如果它過度發佈會怎樣?

它是一個常量字符串,它的行爲方式與NSString對象的行爲方式相同嗎?

如果屬性是(assign),那麼這是否意味着它在運行循環之後無效?

回答

6

是的,沒關係。不管用哪種方式,常量字符串仍然會被編譯到程序中(因爲無論如何你必須在[NSString stringWithString:@""]中使用它)。常量字符串實際上並沒有被保留/釋放,但重要的是它的語義:你正在分配一個字符串(它有一個淨+0的retainCount,就你所關心的而言 - 你還沒有alloc編輯它,所以你不擁有它)到一個將獲得它的所有權的財產。如果該屬性爲(assign),那麼它仍然可以使用一個常量字符串,但autorelease池消耗後它將在語義上無效。

+1

同意。對於任何形式的'[NSString stringWithString:@「...」],都沒有任何理由。這只是浪費週期而無所作爲。 –

+1

@Rob Napier:使用它的唯一原因是當你有一個可變的字符串。這就像'-copy'的+0替代品。 – jtbandes

+0

我認爲Rob意味着沒有理由將_literal_傳遞給'stringWithString:'。 –

相關問題