2012-08-13 50 views
0

我已經看到了一些答案,但這些答案並沒有足夠的擴展,我認爲他們在ARC被引入之前。在ios中會NSString = NSString導致內存泄漏?

所以,如果我有兩個NSSstring可我設置

string1 =string2; 

NSString * [email protected]"String"; 
[email protected]"Lead"; 

不會造成內存泄漏或其他問題?

編輯:視圖控制器或委託屬性設置爲(複製,非原子)怎麼辦?

Edit2:它應該是NSString * al = @「String」。我希望這不會改變它不泄漏的想法。

+0

這不是一個論壇。你應該問一個重點問題,並選擇你認爲回答你的問題的答案。閱讀常見問題,瞭解網站應該如何運作。 :) http://stackoverflow.com/faq – Almo 2012-08-13 21:26:01

+0

我看到你最近在網站上,仍然沒有接受任何答案。 – Almo 2012-08-21 13:18:47

回答

0

既不會在ARC中泄漏。然而,在這種情況下,您可能想要知道您正在處理引用 - 不會執行隱式複製(除非使用複製或複製限定屬性)。

編輯:視圖控制器或委託屬性設置爲(複製,非原子)怎麼辦?

對於NSString s?是的,copy應該是NSString的默認值。 nonatomic應該是所有內容的默認值。當然,這也有例外 - 當你可能會偏離默認值。

+0

是的,因爲它不會泄漏? – user1515993 2012-08-13 21:09:03

+0

@ user1515993「是」,'NSString'變量/屬性應該是'複製'。也 - 在ARC下都不會泄漏。 – justin 2012-08-13 22:54:10

0

你的代碼是安全的,不會泄漏。可可和NSStrings在處​​理這些問題方面非常聰明。

由於NSStrings是不可變的,你最終可能會發生其他有趣的事情,如果你試圖擔心指針本身,你可能會感到奇怪。但是你的例子不會遇到這些問題。

+0

什麼類型的古怪? – user1515993 2012-08-13 20:55:14

+0

這超出了這個問題的範圍。但你可以閱讀更多其他地方,例如在這裏:http://stackoverflow.com/questions/9154288/why-does-nsstring-sometimes-work-with-the-equal-sign – Almo 2012-08-13 20:56:56

1

不,分配和重新分配字符串文字不會導致內存泄漏。在不使用ARC並指定使用alloc,retain,copy,mutableCopy或使用前綴爲new的方法時,您只需要擔心內存泄漏。

NSString a1=[@"String" mutableCopy]; 
[email protected]"Lead";//This will cause a leak since you called copy above. 

查看Advance Memory Management Rule的詳細資料。

+0

我忘了添加指針,所以它應該說NSString * al = @「String」。這是否改變了它? – user1515993 2012-08-13 20:54:06

+0

指針是必需的,否則你會得到編譯器錯誤。這不會改變事情,因爲我假設有一個指針在那裏。 – Joe 2012-08-13 20:55:32

+0

您可以編輯問題。 – Almo 2012-08-13 20:55:37