• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
RE: Memory leaks when running an apple event
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Memory leaks when running an apple event


  • Subject: RE: Memory leaks when running an apple event
  • From: Rudi Sherry <email@hidden>
  • Date: Fri, 12 Oct 2007 11:00:03 -0700

On Fri, 12 Oct 2007 11:38:58 -0400, Paul Bruneau wrote:

On Oct 12, 2007, at 11:13 AM, Alex Bumbu wrote:


Hi all,

I'm trying to create an simple application using Apple Events to
see if a specified application is running (iTunes in my case). A
thread from main.m will use the mainProcess method so the script
will run every second. The problem I'm having is that the
NSAppleEventDescriptor i'm using (result) isn't deallocated and the
every 100 secs it grows with 1Mb of memory. Can someone help me
please ... I've tried release, dealloc, autorelease and isn't
working. Please if you know give me some ideas how to solve this
problem in cocoa. Thanx guys.

This is the code I'm using:

-(void)isAppRunning
{
     NSString* appleEventString = [NSString stringWithFormat:@"set
itunes_active to false\n with timeout of 1 second\n tell
application \"Finder\"\n if (get name of every process) contains
\"iTunes\" then set itunes_active to true\n end tell\n end timeout
\n return itunes_active"];
   NSAppleScript *script = [[NSAppleScript alloc]
initWithSource:appleEventString];
   NSDictionary *errorInfo;
   NSAppleEventDescriptor* result;
   result = [script executeAndReturnError:errorInfo];

   NSLog(@"%@", [result stringValue]);
     [result dealloc];
   [script dealloc];
}

-(void)mainProcess:(id)anObject
{
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     while (1)
   {
       [self isAppRunning];
   }
     [pool release];
}

You shouldn't be calling dealloc yourself. That is up to Cocoa to deal with. You should review the memory management guide several times (from my experience it takes awhile to start to understand.

http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/
index.html

Two things:

(1) [script release] is what you want to call, as following Paul's suggesting will reveal.

(2) It's also possible that Mac OS X, when running the script, retains and autoreleases quite a bit of memory; this won't get freed until the surrounding pool gets released; note that your autorelase pool doesn't actually get released until the loop (which runs forever) returns. Put another allocation and release of an autorelease pool inside the "while (1)" loop, around the call to to free this stuff.

Rudi

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Prev by Date: Re: Reading a binary file format?
  • Next by Date: Re: Using an NSMatrix subclass for a board game view
  • Previous by thread: Re: Memory leaks when running an apple event
  • Next by thread: Memory leaks when running an apple event
  • Index(es):
    • Date
    • Thread