来自 Java 背景,我在想办法在 Objective-C 中进行防御性编程时遇到了麻烦。
假设SomeClass是可变的并提供了一个复制方法,这是我用 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;
在将 setter 的参数分配给 customerList 属性之前,会对其进行复制。让我困惑的是写一个合适的吸气剂。到目前为止,它看起来像这样:
(SomeClass *)customerList {
if(!_customerList) {
_customerList = [[SomeClass alloc] init];
}
return _customerList;
}
它适用于所有内部方法调用,如 self.customerList = ...,但会将直接指针传递给任何造成安全漏洞的外部调用。我正在考虑提供一个不同的公共 getter 来返回一个副本,但想避免它,因为它需要一个非常规的名称。你会如何处理这种情况?
谢谢你。