0

こんにちは、遅延インスタンス化を行う場合、セッターまたはゲッターで行う必要がありますか? ゲッターでそれを行うと聞いたことがありますが、ゲッターによって呼び出される前にプロパティが設定されている場合はどうなりますか? それはプロパティがまだゼロであることを意味しますか?また、getter で遅延インスタンス化し、誰かが setter 関数を呼び出しても、setter で遅延インスタンス化しない場合、プロパティ値は何ですか?

4

1 に答える 1

0

ゲッターの方がいいと思います。セッターが最初に呼び出された場合、それは要求されたものにプロパティを設定し、プロパティの以前の値が何であったかは誰も気にしません。

- (id)foo
{
    if (_foo == nil) {
        _foo = [[Foo alloc] init];
    }
    return _foo;
}

- (void)setFoo:(id)f
{
    if (_foo != f) {
        [_foo release]; // Yay, messaging nil is safe!
        _foo = [f retain];
    }
}
于 2013-06-10T06:06:00.960 に答える