Fwd: Memory leaks when running an apple event
Fwd: Memory leaks when running an apple event
- Subject: Fwd: Memory leaks when running an apple event
- From: "Alex Bumbu" <email@hidden>
- Date: Mon, 15 Oct 2007 13:13:11 +0300
---------- Forwarded message ----------
From: Alex Bumbu <email@hidden>
Date: Oct 15, 2007 1:09 PM
Subject: Re: Memory leaks when running an apple event
To: Rudi Sherry <email@hidden>
Thanx for the reply. I've made the modifications u've recomended to me but
the problem still exists. I've found that the NSAppleEventDescriptor *result
consumes the memory, but if i try to release it the application will crash.
I've tested with this example from apple
http://developer.apple.com/technotes/tn2006/tn2084.html but i'm having the
same problem.
Here is the code i'm using now:
-(void)isAppRunning
{
NSDictionary* errorInfo;
NSAppleEventDescriptor* result;
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];
result = [script executeAndReturnError:&errorInfo];
NSLog(@"%@", [result stringValue]);
[script release];
}
-(void)mainProcess:(id)anObject
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
while (1)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self isAppRunning];
[pool release];
}
[pool release];
}
On 10/12/07, Rudi Sherry <email@hidden > wrote:
>
> 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