在ios中NSString = NSString会导致内存泄漏吗?

时间:2012-08-13 20:47:02

标签: ios memory-leaks nsstring automatic-ref-counting nscopying

我已经看到了一些答案,但那些答案还没有扩大,我认为它们是在ARC被引入之前。

所以,如果我有两个NSSstring,我可以设置

string1 =string2;

NSString * a1=@"String";
al=@"Lead";

没有造成内存泄漏或其他问题?

编辑:如何设置视图控制器或委托属性(复制,非原子)?

Edit2:它应该是NSString * al = @“String”。我希望这不会改变它不泄漏的想法。

3 个答案:

答案 0 :(得分:1)

不,分配和重新分配字符串文字不会导致内存泄漏。在不使用ARC并指定使用allocretaincopymutableCopy或前缀为new的方法时,您只需担心内存泄漏

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

有关详细信息,请参阅Advance Memory Management Rule

答案 1 :(得分:0)

您的代码是安全的,不会泄漏。 Cocoa和NSStrings非常聪明地处理这些问题。

你最终可能会遇到其他有趣的事情,因为NSStrings是不可变的,如果你试图担心指针本身就会变得怪异。但是你的例子不会受到这些问题的影响。

答案 2 :(得分:0)

也不会泄漏ARC。

但是,您可能想知道在这种情况下您正在处理引用 - 不执行隐式复制(除非您使用复制或复制限定属性)。

  

编辑:如何设置视图控制器或委托属性(复制,非原子)?

for NSString s?是的,copy应该是NSString的默认值。 nonatomic应该是所有内容的默认值。当然,也有例外 - 当你可能偏离默认值时。