2012-08-13 47 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