On Aug 22, 2013, at 3:05 AM, Diederik Meijer | Ten Horses 
<diede...@tenhorses.com> wrote:

> What actually speeds things up significantly is to revert back to NSString 
> and use NSRegularExpression.
> I now needs seven seconds on iPad3 to handle >600 replacement actions. This 
> is, in itself a VERY long time

Indeed.; that’s incredibly slow. You should be able to do this in a handful of 
milliseconds. Don’t make your users suffer through a progress meter because you 
couldn’t find the right optimization :)

The right way to do this is by scanning through the original string and writing 
to a new mutable string. Using replaceCharacters on a mutable string isn’t much 
of a speedup because it keeps copying characters in the mutable string over and 
over (and copying the entire string if its buffer needs to grow.)

create the empty output mutable string with sufficient capacity (i.e. maybe 2x 
the input string length)
set pos to 0
repeat
        find next instance of marker in original string starting from index 
‘pos’
        if none found
                break
        append input characters from ‘pos’ to start of marker to output string
        append replacement characters to output string
        advance ‘pos’ to end of marker
end

I would guess that most algorithms textbooks describe things like this in more 
detail.

—Jens
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to