• 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: NSOperationQueue and for-loop
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSOperationQueue and for-loop


  • Subject: Re: NSOperationQueue and for-loop
  • From: Koen van der Drift <email@hidden>
  • Date: Wed, 03 Oct 2012 08:37:29 -0400

On Tue, Oct 2, 2012 at 10:30 PM, Koen van der Drift
<email@hidden> wrote:

>> Thanks, I'll Google for some examples. For now, I still get an EXC_BAD_ACCESS (code=13, address = 0x0) error in one of the threads after several iterations. Some more digging reveals:*** -[MyObject setPosition:]: message sent to deallocated instance 0x1075a6480. This address is the current MyObject, and only one is created during each iteration.
>
> It's all very confusing still.  I'll keep looking.


I'm not at my Mac right now (I have a non-programming daytime job),
but I think I know what could be going on. This is some code (typed in
email program) very similar to what I did so far and which was causing
the crashes:

NSUInteger __block i, j,;
MyObject __block *newObj;

NSMutabbleArray    *temp = [[NSMutableArray alloc] init];
NSOperationQueue *q = [[NSOperationQueue alloc] init];

for (i = 0; i < 10; i++) {
	[q addOperationWithBlock: ^{
		for (j=1; j < 5; j++) {
			newObj = [MyObject alloc] init];
			[newObj doSomething: i];
			[newObj doSomethingElse: j];

			[temp addObject: newObj];
		}
	}];
}

[q waitUntilAllOperationsAreFinished];
[self updateUIWithArray: temp];

The crash would always occur at one of the doSomething calls, and is
related to newObj already being dellocated ("message sent to
deallocated instance"). So maybe with all those thread going on,
newObj somehow gets re-used before it was added to temp.

So I see two solutions: 1) add a copy of newObj to temp,  or 2) put
the declaration of newObj inside the inner for loop.

I won't be able to test it until later, but am I on the right track here?

Also, is waitUntilAllOperationsAreFinished needed to make sure all
iterations are completed before moving on to update the UI?

- Koen.

_______________________________________________

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

  • Follow-Ups:
    • Re: NSOperationQueue and for-loop
      • From: Mike Abdullah <email@hidden>
References: 
 >NSOperationQueue and for-loop (From: Koen van der Drift <email@hidden>)
 >Re: NSOperationQueue and for-loop (From: email@hidden)
 >Re: NSOperationQueue and for-loop (From: Koen van der Drift <email@hidden>)
 >Re: NSOperationQueue and for-loop (From: Koen van der Drift <email@hidden>)
 >Re: NSOperationQueue and for-loop (From: email@hidden)
 >Re: NSOperationQueue and for-loop (From: Koen van der Drift <email@hidden>)

  • Prev by Date: Re: NSOperationQueue and for-loop
  • Next by Date: Re: NSOperationQueue and for-loop
  • Previous by thread: Re: NSOperationQueue and for-loop
  • Next by thread: Re: NSOperationQueue and for-loop
  • Index(es):
    • Date
    • Thread