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;
customerList プロパティに割り当てる前に、setter の引数のコピーを作成します。私を混乱させるのは、適切なゲッターを書くことです。これまでのところ、次のようになります。
(SomeClass *)customerList {
if(!_customerList) {
_customerList = [[SomeClass alloc] init];
}
return _customerList;
}
これは、self.customerList = ... のようなすべての内部メソッド呼び出しで機能しますが、セキュリティ違反を引き起こす外部呼び出しへの直接ポインターを渡します。コピーを返す別の public getter を提供することを検討していましたが、型にはまらない名前が必要になるため、これは避けたいと考えています。この状況をどのように対処しますか?
ありがとうございました。