菜鸟教程小白 发表于 2022-12-13 09:07:06

objective-c - 将 NSString 拆分为子字符串的最节省内存的方法


                                            <p><p>我有以下代码:</p>

<pre><code>    int start = .location + 24;
    int end = .location;
    self.parts = [ init];

    NSString* startHtml = ;
    NSString* mainHtml = ;
    NSString* endHtml = ;
    // !! At this point we have the string in memory twice
    ;

    ;

    NSArray *splitHtml = ;
    //; &lt;-- this causes bad access errors. Does the split do a copy or does it just create a new set of pointers but use the same memory?

    for(NSString* part in splitHtml){
      if (first){
            ;
            first = NO;
      } else {
            ];
      }
   }

    ;
</code></pre>

<p>这个问题是 html 大约是 20Mb。我将其拆分为 startHtml、mainHtml 和 endHtml。拆分后,我然后发布 html。但是在此版本之前,所有 4 个 NSString 都在内存中,因此应用程序使用了额外的 40Mb 左右。</p>

<p>然后我拆分 mainHtml 并将子字符串分配给一个名为 splitHtml 的 NSArray,这再次意味着它们在内存中存储了两次。我尝试释放 mainHtml 但这会导致 EXC_BAD_ACCESS 错误。</p>

<p>有没有办法绕过这个对象在被释放之前两次存储在内存中的问题?</p>

<p>我计划将 for 循环替换为 while 循环,该循环从 splitHtml 中删除已处理的 NSString。当 splitHtml 为空时,将满足循环条件。这样一来,随着parts 数组消耗更多内存,splitHtml 数组消耗更少内存。我需要释放每个 NSString 还是可以将其删除并让整个数组消耗更少的内存?</p>

<p>谢谢,</p>

<p>乔</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>使用 <code>rangeOfString:</code>、<code>NSScanner</code> 或正则表达式解析 HTML 是徒劳的。它可能适用于您的测试用例,但一旦 HTML 更改它就会中断。 </p>

<p>即请记住:</p>

<pre><code>&lt;div class=\&#34;endofsections\&#34;&gt;
</code></pre>

<p>还有:</p>

<pre><code>&lt;div    class=\&#34;endofsections\&#34;   id=1
    title=&#34;End Of Sections&#34;&gt;
</code></pre>

<p>两者在 <code>class</code> 属性方面是相同的。</p>

<p>使用适当的 HTML 解析器。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 将 NSString 拆分为子字符串的最节省内存的方法,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7390226/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7390226/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 将 NSString 拆分为子字符串的最节省内存的方法