|
|
1
2
如果他们正在改变类型,你可能不会保留他们。 对于字符串,您的属性应该类似于(在.h文件中)
你把它设置成
它使用属性保留(或在本例中复制)字符串。 但是,如果你这样做了
您已在不使用属性的情况下设置了变量,因此字符串不会被保留-它将在将来的某个时间点自动删除,并且您将拥有一个不再指向字符串的指针:) 为什么对NSStrings使用copy而不是retain? 实际上,它是任何不可变但有可变子类(如NSDictionary、NSArray、NSSet等)的副本。 把它当作自卫。 如果你有这样的房产会怎么样:
在你的代码中,你使用一个循环中的东西的数量,即。
好吧,应该没问题。直到有人传入nsmutable数组而不是NSArray。您的代码假设,因为您有一个NSArray,它里面的东西的计数不会改变。 如果有人从NSArray中删除了一个项(因为它实际上是NSMutableArray,但您不知道),而您在该循环中,您的代码将可怕地死掉(一个越界异常)。 copy所做的不是调用retain,而是调用copy-making 100%确保在对象内部有一个不可变数组,而不是其他人传入的可变对象。可变数组可以根据需要进行更改—您有自己的副本,因此代码更安全。 然而,这是以消耗内存为代价的——现在内存中有两个数组。通常情况下,为了避免可能发生的崩溃,需要对内存进行处理
实际上,如果有人只是通过了一个普通的NSArray,因为它的实现是不可变的
|
|
|
mikko · SwiftUI如何在不同堆栈中实现同一视图的平滑动画 1 年前 |
|
|
routern · 如何组合contextMenu和圆角矩形? 1 年前 |
|
|
DevHome98 · 3D触摸不适用于设备swift 2 年前 |
|
|
dunoiww · 从全屏返回时如何触发onAppear 2 年前 |
|
|
Community wiki · iPhone上ivar的继承问题 2 年前 |
|
|
Community wiki · 查找iOS日历 2 年前 |
|
|
Community wiki · 有效的IPhone编程技术[关闭] 2 年前 |