0

インスタンス変数を遅延ロードしたいのですが、それがクラスの外から設定されている場合は、それを強く指したくありません。

これは可能ですか?

例えば:

@interface MyClass

@property (nonatomic,weak) LazyLoadedObject lazyObject;
@end

@implemetation MyClass

-(LazyLoadedObject *)lazyObject
{
  if (_lazyObject== nil)
  {
    //create a object and strongly point to it
    _lazyObject = [LazyLoadedObject new]
  }
  return _lazyObject;
}
@end
4

2 に答える 2

1

必要に応じて、強力な参照先となるプライベート用の別のプロパティを作成します。

@property (nonatomic, weak) id lazyObject;
@property (nonatomic, strong) id privateLazyObject;

次に、次のようにゲッターを実装します。

- (id)lazyObject {
    // If contains value, return that, otherwise redirect to private strong value.
    return self->_lazyObject ?: self.privateLazyObject;
}

- (id)privateLazyObject {
    // Standard lazy getter
    if ( ! self->_privateLazyObject) {
        self.privateLazyObject = ...; // Strong ownership
    }
    return self->_privateLazyObject;
}

したがって、 public を設定するときはlazyObject、 private を無効にします。

- (void)setLazyObject:(id)lazyObject {
    self->_lazyObject = lazyObject; // Weak ownership
    self.privateLazyObject = nil; // Release any existing strong one.
}
于 2013-10-03T11:24:30.687 に答える
0

strong「強く指し示したい」ので、プロパティを作成します。

于 2013-10-03T11:08:53.217 に答える