1

私が取り組んでいるプロジェクトの現在の開発段階に大きな問題があります。

localizable.string からロードされた動的コンテンツを含む 50 個の複数行 UILabels を保持する UIScrollView があります。ラベルは個別にフォーマットされています (フォント、太字、斜体、色)。

問題は、アプリの実際のメモリ使用量がほぼ 70MB (ライブ バイト 3MB) に跳ね上がることです。これは容認できないものであり、現在のコンセプトでは、目標を達成するために ~200 の UILabels を使用する必要があります。

私に何ができる ?UILabels を遅延ロードまたは再利用する方法はありますか? UITextView または UIWebView を使用する必要がありますか?

どうやってやるの ?

ありがとう。

4

2 に答える 2

2

https://github.com/AliSoftware/OHAttributedLabelまたは UIWebView OHAttributedLabel のようなものを使用することをお勧めします WebView よりもメモリフットプリントがはるかに小さいはずですが、実際に必要な Web ビューの数によって異なります。

UIWebView を使用する場合

IB を使用してアウトレットを作成および接続し、.m で html 形式のテキストを loadHTMLString:baseURL 経由でロードする場合は、ビューに Web ビューを描画します。

于 2012-09-25T23:58:17.157 に答える
2

みなさんの助けを借りて、私はこのソリューションを思いつきました。

内部にマーカーを含むhtml「テンプレート」ファイルとUIWebViewを使用しています。

基本的に私がやっていることは次のとおりです。

  1. html ファイルのパスを取得します。
  2. html テンプレートの内容で文字列を作成します。
  3. html のマーカーを自分の文字列 (NSLocalized 文字列 - 大量のテキスト) に置き換えます。
  4. 「loadHTMLString」を使用して、新しく作成された文字列の WebView コンテンツにロードします。

結果: 70MB のメモリ フットプリントから、12MB のメモリ フットプリントが得られました (これは A4 のテキストの約 20 ページに相当します)。

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

    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"yourhtmlfile" ofType:@"html"];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[_webView setBackgroundColor:[UIColor clearColor]];
    [_webView setOpaque:NO];

NSString *htmlBody = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF16StringEncoding error:nil];

htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_1//" withString:NSLocalizedString(@"localizedKey_1", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_2//" withString:NSLocalizedString(@"localizedKey_2", nil)];
htmlBody = [htmlBody stringByReplacingOccurrencesOfString:@"//marker_3//" withString:NSLocalizedString(@"localizedKey_3", nil)];

[self.webView loadHTMLString:htmlBody baseURL:baseURL];

そして今、私はテキストフォーマットのようなhtmlグッズを使うことができます:D!

上記が多くの人に役立つことを願っています:)!

応援ありがとうございました!

于 2012-09-26T13:31:27.927 に答える