It's no problem in a tiny bit of code like this, but:
For example, the range that you are extracting is defined in one line, then the length is defined somewhere else, then the start is defined in a third place... To find out what the substring method actually does, I need to check in three places. Can you create a single line that declares and sets "range", just before it is used?
The variable "i" is worse. There is a dozen lines between initialization and increment. You could just write
for (NSInteger i = 0; i < intLength; ++i) { ... }
or
for (NSInteger i = 0; i < [string length]; ++i) { ... }
That way the reader can see immediately what the range of the loop is, by checking a single statement, and not three statements that are far apart.