And run the thing under Instruments, which would undoubtedly have shown memory 
usage spiking even with modest data sets.

        — F

On 14 Mar 2013, at 5:40 AM, Jean-Daniel Dupas <devli...@shadowlab.org> wrote:

> Le 14 mars 2013 à 11:12, Richard Heard <heard...@gmail.com> a écrit :
> 
>> 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
>> 
> 
> Or simply work on a mutable string when you plan to mutate it. 
> 
>> 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/devlists%40shadowlab.org
>> 
>> This email sent to devli...@shadowlab.org
> 
> -- Jean-Daniel
> 
> 
> 
> 
> 
> _______________________________________________
> 
> 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/fritza%40manoverboard.org
> 
> This email sent to fri...@manoverboard.org

-- 
Fritz Anderson
Xcode 4 Unleashed: 4.5 supplement for free!
http://www.informit.com/store/xcode-4-unleashed-9780672333279


_______________________________________________

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