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 = ;
//; <-- 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><div class=\"endofsections\">
</code></pre>
<p>还有:</p>
<pre><code><div class=\"endofsections\" id=1
title="End Of Sections">
</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]