2017-01-24 8 views
-1

私は目的のアプリケーションにxibを持っています。しかし、私はこのviewControllerをロードしようとしているとき、これは約1秒を費やし、これは悪い感じです...xibビューをviewControllerに高速に読み込む方法はありますか?

私はカスタムフォントを使用していますが、これを私の.plistに正しく追加しました customViewクラスは、ファイルの所有者によって追加され、アウトレットと接続されます。

私のコードは次のとおりです。

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 

    if (self) 
    { 
     [email protected]"MyCustomView"; 

     [self addSubview: 
     [[[NSBundle mainBundle] loadNibNamed:nibname 
             owner:self 
            options:nil] objectAtIndex:0]]; 


    } 
    return self; 
} 

そして、私はこのように私のViewControllerでこれを読み込む:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    ... 
    MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
    [self.view addSubview:myview]; 
    ... 
} 

は私が正しく、このカスタムビューをロードするのですか?

どのようにすればこの処理を高速化できますか?その後、修正

編集1は、マットのコメントをお読みください。

[self.view addSubview:myview]; 

供給する:最後の間違ったコード:[self.viewのMYVIEWを];

+0

これは実際のコードではありません。 '[self.view myview];行は意味を持ちません。 – matt

+0

¿?本当に私はこれをuiscrollViewに追加していますが、もっと簡単な例では、この例をビューに追加します。何が起きましたか?それはあまりにも仕事です.... – user3745888

+0

何にも何も追加しませんでした。あなたが 'addSubview:'と言うつもりなら、それを_say_するべきです。あなたがフリーハンドで入力するだけでなく、_real_コードを供給してください。 _実際のテストプロジェクトからコピー&ペーストする。 – matt

答えて

2

あなたが言ったことに基づいて問題を再現することはできません。

2017-01-24 12:47:18.812 NibLoadTest[12087:135969] 506983638.811982 
2017-01-24 12:47:18.814 NibLoadTest[12087:135969] 506983638.814367 

1秒の遅延ではありません。

NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 
MyCustomXib *myview = [[MyCustomXib alloc] initWithFrame:CGRectMake(0, 0, 320, 600)]; 
[self.view addSubview:myview]; 
NSLog(@"%f", [[NSDate new] timeIntervalSinceReferenceDate]); 

そして、ここでは出力があります:私はあなたのviewDidAppearコードにタイミングを追加しました!それは千分の1の秒のカップルです。

このように、この問題は幻想的であるか、または表示されていないことが原因です。あなたが何かを取っている時間を測定しようとしているなら、測定値です。理想的には、Instrumentsを使用します。それが何のためだ。何が時間を取っているかを教えてくれるでしょうとなぜ。推測しないでください。

+1

このコードを 'viewDidAppear'に入れるのは危険です。これは、このビューコントローラの存続期間にわたって何度も呼び出される可能性があり、同じビューを何度も何度も追加することになります。 – matt

+0

ありがとう! @mattこれは正解です。私はviewDidLoad関数に自分のコードを変更して、この作業が遅滞なく正しく行われています。あなたがコメントした問題は、viewDidAppearで何度も呼び出されたことです。ハッピーコーディング!ありがとう! – user3745888

関連する問題