作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
根据一些直观的(可能是错误的)性能想法,我总是在存储可变实例之前获取它的副本
。因此,如果一个属性需要一个 NSArray
,我会使用我正在使用的可变数组并将其存储为 self.array = mutableArray.copy
(尽管该属性被指定为 strong
或 retain
)。
突然间,这对我来说似乎很愚蠢,但它是吗?可变实例 - 执行完全相同的任务 - 执行相同的操作吗?
注意:可变实例超出范围并且(感谢 ARC)在此之后立即被释放,所以不用担心一旦它被分配给属性就会发生变化。
最佳答案
NSArray
和 NSMutableArray
都是(据我所知)在 CFArray 之上实现的,它只是有一个标志指定它是否可变。需要可变数组的 CFArray
函数在开头有一个断言,检查该标志:
void CFArraySetValueAtIndex(CFMutableArrayRef array, CFIndex idx, const void *value) {
// snip...
CFAssert1(__CFArrayGetType(array) != __kCFArrayImmutable, __kCFLogAssertion, "%s(): array is immutable", __PRETTY_FUNCTION__);
可变的和不可变的 CFArray
除了通过或失败这个断言之外是相同的,所以 NSArray
和 NSMutableArray
应该是,性能- 或其他方式。
关于objective-c - 是可变类 "heavier?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181011/
根据一些直观的(可能是错误的)性能想法,我总是在存储可变实例之前获取它的副本。因此,如果一个属性需要一个 NSArray,我会使用我正在使用的可变数组并将其存储为 self.array = mutab
我是一名优秀的程序员,十分优秀!