我已经看到了一些答案,但这些答案还不够扩展,我认为它们是在引入 ARC 之前。
所以如果我有两个 NSSstring 我可以设置
string1 =string2;
或者
NSString * a1=@"String";
al=@"Lead";
不会导致内存泄漏或其他问题?
编辑:视图控制器或委托属性设置为(复制,非原子)怎么样?
Edit2:它应该是 NSString *al=@"String"。我希望这不会改变它不会泄漏的想法。
我已经看到了一些答案,但这些答案还不够扩展,我认为它们是在引入 ARC 之前。
所以如果我有两个 NSSstring 我可以设置
string1 =string2;
或者
NSString * a1=@"String";
al=@"Lead";
不会导致内存泄漏或其他问题?
编辑:视图控制器或委托属性设置为(复制,非原子)怎么样?
Edit2:它应该是 NSString *al=@"String"。我希望这不会改变它不会泄漏的想法。
不,分配和重新分配字符串文字不会导致内存泄漏。当不使用 ARC 并分配使用alloc
、retain
、或以 . 为前缀的方法时copy
,您只需要担心内存泄漏。mutableCopy
new
NSString a1=[@"String" mutableCopy];
al=@"Lead";//This will cause a leak since you called copy above.
有关详细信息,请参阅高级内存管理规则。
也不会在 ARC 中泄漏。
但是,您可能想知道在这种情况下您正在处理引用 - 不执行隐式复制(除非您使用复制或复制限定属性)。
编辑:视图控制器或委托属性设置为(复制,非原子)怎么样?
为NSString
s? 是的,copy
应该是NSString
s 的默认值。nonatomic
应该是一切的默认值。当然,也有例外——当您可能偏离默认值时。
您的代码是安全的,不会泄漏。Cocoa 和 NSStrings 非常聪明地处理这些问题。
由于 NSString 是不可变的,因此您最终可能会发生其他有趣的事情,如果您尝试担心指针本身,您可能会感到奇怪。但是您的示例不受这些问题的影响。