Le 6 févr. 09 à 07:32, Martin Wierschin a écrit :

On Feb 5, 2009, at 4:42 PM, Steve Sisak wrote:

NSString * newString = [inputString stringByReplacingCharactersInRange:range withString:@""];
        [inputString release]; // release old inputString
        inputString = [newString retain]; // retain new inputString

This sequence is not safe. As an optimization there is nothing preventing "inputString" from returning self if "range" is of zero length. If that ever happened, you could end up deallocating the string before the following retain occurs. As has been suggested, using a single mutable string is probably the best way to go.

I don't think so. If I understand memory management correctly want you describe is a bug.

By the rule stringByReplacingCharactersInRange:withString: return an instance that the caller dont have ownership. And NSString know nothing about the ownership of self and the code outside of itself, he can't make this sort of optimization.

If there is an optimization in stringByReplacingCharactersInRange:withString: then return will have the form of :

return [[self retain] autoreleased];

With this sequence, the precedent code is safe.

Frédéric_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to