Apple documentation says:
The returned string C is automatically freed as soon as the returned object is returned; you must copy line C if you want to save it outside the autodetection context in which line C is created.
This seems rather obscure to me.
NB You do not have to worry about what the current implementation is doing. Implementation Changes
Extrapolating the above, the answers to your questions are probably the following:
but when is he actually released?
When the auto-advertisement pool merges.
When is the original NSString freed up?
Not. The documentation implies that you can highlight a line, take UTF8String, then release the line, and UTF8String will still be valid , but know this line from the Memory Management Rule :
Usually the resulting object remains valid in the order in which it was received ... although you must also take care to change the object from which you received another object.
"Modification of an object" may include the release of NSString from which you received the UTF8 string.
When is the current auto settlement pool cleared?
What the documents say.
Ever again?
Not.
Also, when is it guaranteed to stay, unlike the current implementation?
If it is not documented, it is not guaranteed.
If it stays for the lifetime of NSString, will the same pointer be returned every time?
I doubt. Maybe for immutable strings, the UTF8 string is cached, but maybe not. Why not write code to try it out? In any case, you cannot rely on it in production code and in no situation where your NSString can really be NSMutableString.