gpt4 book ai didi

访问器方法中的 Objective-C 防御性复制

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:09 25 4
gpt4 key购买 nike

我有 Java 背景,但我很难找到在 Objective-C 中进行防御性编程的方法。
假设 SomeClass 是可变的并提供了一个 copy 方法,这是我用 Java 编写的一段典型代码:

public MyClass  
{
private SomeClass customerList;
...
public SomeClass getCustomerList() {
return this.customerList.copy();
}
public void setCustomerList(SomeClass list) {
this.customerList = list.copy();
}
}

我花了一些时间才弄明白

@property (nonatomic, copy) SomeClass *customerList;  

会在将其分配给 customerList 属性之前复制 setter 的参数。让我感到困惑的是写一个合适的 setter/getter 。到目前为止它看起来像这样:

(SomeClass *)customerList {  
if(!_customerList) {
_customerList = [[SomeClass alloc] init];
}
return _customerList;
}

它适用于所有内部方法调用,如 self.customerList = ...,但会将直接指针传递给任何创建安全漏洞的外部调用。我正在考虑提供一个不同的 public getter 来返回一个副本,但我想避免它,因为它需要一个非常规的名称。你会如何处理这种情况?
谢谢你。

最佳答案

您可以将 -customerList 实现重写为:return [_customerList copy];。请注意,这通常不是其他人期望访问器工作的方式,因此请务必记录这一点。

关于访问器方法中的 Objective-C 防御性复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com