Your logic is clearly flawed. This only seems to replace occurrences of $ with 
the word DOLLAR. 

Also, if you are dealing with large strings, you could always use one of the 
below idioms to reduce memory pressure.


@autoreleasepool { }
or 

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[pool drain];

-R


On 13/03/2013, at 3:07:30 AM, Dave <d...@looktowindward.com> wrote:

> 
> On 13 Mar 2013, at 09:24, Markus Spoettl wrote:
> 
>> On 3/13/13 9:36 AM, Dave wrote:
>>> 
>>> On 12 Mar 2013, at 21:34, Graham Cox wrote:
>>> 
>>>> 
>>>> On 13/03/2013, at 6:53 AM, Dave <d...@looktowindward.com> wrote:
>>>> 
>>>>> If that is the case, then how do you signal to the compiler/analyzer that 
>>>>> you
>>>>> are returning a retained object?
>>>> 
>>>> In general you shouldn't return a retained object (unless it's temporarily
>>>> retained and will be autoreleased of course)
>>> 
>>> Why? Where does it say this?
>> 
>> https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html
>> 
>>> And Autorelease is evil and should never be used if it can be avoided!
>> 
>> Nonsense.
>> 
> 
> Obviously, it isn't evil, but from experience of working on 5 or more major 
> iOS applications, I've found most bugs were caused as a consequence of 
> autorelease, that's why I avoid it if possible. I don't have a problem with 
> memory management, it's simple as long as you follow the rules.
> 
> Avoiding autorelease makes it run faster anyway and makes the whole app more 
> robust in general. Autorelease in the wrong hands can cause massive 
> inefficiencies that you'd never code otherwise, here are some examples of 
> what I mean:
> 
> -(NSString*) processString:(NSString*) theString
> {
> NSString*                     myWorkString;
> 
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"/b" 
> with:@"BOLD"];                                     //1
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"/i" 
> with:@"ITALICS"];                                  //2
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"/u" 
> with:@"UNDERLINE"];                        //3
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"*" 
> with:@"ASTERISK"];                          //4
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"&" 
> with:@"AMPERSAND"];                 //5
> myWorkString = [theString stringByReplacingOccurencesOfSting:@"$" 
> with:@"DOLLAR"];                            //6
> 
> and so on................
> 
> return myWorkString;
> }
> 
> This code creates 5 strings that are not needed and will clog up memory until 
> the runloop is called or the pool is drained. Imagine there were 30 such 
> replacements going on and the initial theString is large (> 100K) and there 
> are 100's of these strings.
> 
> You don't need a degree in applied meta physics to see where this is going. 
> It's not the fault of autorelease I know, it's the fault on inexperienced 
> developers or people that blindly follow rules.
> 
> The underlying problem is that it makes the above method data dependent 
> without really drawing much attention to this fact. I actually had a bug that 
> was caused by this. I worked on an iPad app for an International Newspaper. 
> The App was working ok, until one day it crashed a 5 AM when the new edition 
> was published and the iPad client software downloaded and processed it. When 
> it got to the sports section a method similar to the above (although a lot 
> more complex with a LOT more autorealsed objects) crashed. I got in a 6 AM 
> and it took me a good while to figure out what was wrong. On that particular 
> day, the paper published the football (soccer) league tables for the whole of 
> the UK. Apart from there being a loads of data, it was also heavily 
> attrubuted, bold, italics, colours etc. Well it was too much for the method 
> and when it had built up around 80 to 100 MB of useless autoreleased strings, 
> it crashed!!
> 
> There are loads of other problems I come across as a side effect of junior 
> (and sometimes senior) developers using autorelease, but I think the above 
> described above was the worst.
> 
> That's why I say it's "evil" and I avoid it with a vengeance. So why do you 
> think it's a force for good?
> 
> Besides all this, is it really so hard to add:
> 
> [xxxx release];
> 
> It's less typing than autorelease anyway!!!
> 
> All the Best
> Dave
> 
> 
> _______________________________________________
> 
> 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/heardrwt%40gmail.com
> 
> This email sent to heard...@gmail.com

_______________________________________________

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