0

すべてのビュー コントローラーに対してカスタム ビューを作成することを好みます。そして、次のようなカスタム ビューの弱参照を使用してコードで定義します。

#import "MyViewController.h"
#import "MyCustomView.h"

@interface MyViewController ()
@property (nonatomic, weak) MyCustomView *customView;
@end

@implementation MyViewController
- (void) loadView
{
    MyCustomView *view = [MyCustomView new];
    self.view = view;
    self.customView = view;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // work with custom view
    self.customView.tableView.delegate = self;
    ....
}

@end

これは弱参照の正しい使い方ですか? アプリケーションのクラッシュやリーク、またはその他の問題はありますか?

4

3 に答える 3

3

この場合weakは大丈夫です。ヘッダーで次のように定義されているCustomViewにを割り当てますself.viewUIViewController

@property(nonatomic,retain) UIView *view;

そのため、viewプロパティには保持参照があります。

あなたviewとが同期しなくなる可能性があります-そのため、ゲッターを as として定義して実装しcustomViewたくなるでしょうcustomViewreadonly

- (CustomView *)customView
{
  return (id)self.view;
}
于 2013-04-23T15:46:24.127 に答える
1

UIViewControllerのドキュメントでわかるように、ビュー コントローラーのビュー プロパティにはビューへの強い参照があります。したがって、ビュー プロパティを別のものに設定しない限り、カスタム ビュー オブジェクトは保持されます。要するに、あなたの方法は機能します。

于 2013-04-23T15:44:51.787 に答える
0

このコントローラー内からプログラムでインスタンスを作成するときは、強力な参照を使用して、所有権をこのコントローラーに明確に設定する必要があります。

ビュー オブジェクトを IB または soryboard でそれぞれ作成する場合は、関連IBOutletするものへの弱い参照で十分です。

于 2013-04-23T15:40:56.753 に答える