【问题标题】:In ios will NSString = NSString cause memory leaks?在ios中 NSString = NSString 会导致内存泄漏吗?
【发布时间】:2012-08-10 03:21:28
【问题描述】:

我已经看到了一些答案,但这些答案还不够扩展,我认为它们是在引入 ARC 之前。

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

string1 =string2;

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

不会导致内存泄漏或其他问题?

编辑:视图控制器或委托属性设置为(复制,非原子)怎么样?

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

【问题讨论】:

  • 这不是论坛。你应该问一个重点问题,然后选择你认为能回答你问题的答案。阅读常见问题解答,了解该网站应该如何工作。 :) stackoverflow.com/faq
  • 我看到你最近在网站上,仍然没有接受任何答案。

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


【解决方案1】:

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

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

详情请参阅Advance Memory Management Rules。

【讨论】:

  • 我忘了添加指向它的指针,所以它应该说 NSString *al = @"String"。这会改变它吗?
  • 指针是必需的,否则会出现编译错误。这不会改变事情,因为我假设有一个指针。
  • 哦,我确实将属性设置为非原子和复制。这些还好吗?
  • @user1515993 有关copy 的讨论,请参见here。至于nonatomic,如果你不打算让你的类被多个线程访问,你应该补充一点。
【解决方案2】:

ARC 中也不会泄漏。

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

编辑:视图控制器或委托属性设置为(复制,非原子)怎么样?

对于NSStrings?是的,copy 应该是 NSStrings 的默认值。 nonatomic 应该是所有内容的默认值。当然,也有例外——当您可能偏离默认值时。

【讨论】:

  • @user1515993 “是”NSString 变量/属性应该是“复制”。也 - 在 ARC 下也不会泄漏。
【解决方案3】:

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

您最终可能会发生其他有趣的事情,因为 NSString 是不可变的,如果您尝试担心指针本身,您可能会感到奇怪。但是您的示例不会遇到这些问题。

【讨论】:

猜你喜欢
  • 2021-04-10
  • 2014-06-06
  • 2010-10-25
  • 2016-02-04
  • 2011-02-01
  • 2011-04-18
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多