• 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: Threadsafe copy of objective c object
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Threadsafe copy of objective c object


  • Subject: Re: Threadsafe copy of objective c object
  • From: Dave <email@hidden>
  • Date: Tue, 03 Sep 2013 13:20:15 +0100

Hi,

Basically you are trying to protect the values of an object while you are copying.

If this is the case, then wherever you access these properties you will be need to use a lock based on the object you are copying.

In order to do this, you need to lock the whole object whenever you are accessing the values, one way of doing this is to do something like this:

SafeObj*		myCurrentObject;		//Assume set to object you wish to copy.
SafeObj*		myNewObject;

//**
//**  Read Values
//**
myNewObject = [[SafeObj alloc] initWithObject: myCurrentObject];

Then in initWithObject, do this:

 - (id) initWithObject:(SafeObj*) theObject;
{
self = [self init];
if (self == nil)
	return nil;

@sychronized(theObject)
	{
	self.pVal1 = 	theObject.pVal1;
	self.pVal2 = 	[theObject.pVal2 copy];
	self.pVal3 = 	[theObject.pVal2 mutableCopy];
	}
return self;
}

Of course, in the rest of the code that accesses pValX, you'd need to add @synchronized around getting and setting them. The properties obviously need to be protected as a set, so to read them, create a new local object using initWithObject to copy the values.

To write to a set, you need to add another method:

-(void) setValuesFromObject::(SafeObj*) theObject;
{
@sychronized(self)
	{
	self.pVal1 = 	theObject.pVal1;
	self.pVal2 = 	[theObject.pVal2 copy];
	self.pVal3 = 	[theObject.pVal2 mutableCopy];
	}
}

So, to increment pVal1, you'd do this:


SafeObj*		myCurrentObject;		//Assume set to object you wish to copy.
SafeObj*		myNewObject;

//**
//**  Read Values
//**
myNewObject = [[SafeObj alloc] initWithObject: myCurrentObject];
myNewObject.pVal1++;
[self setValuesFromObject: myNewObject];


Hope this helps
Dave


On 3 Sep 2013, at 11:52, Jonathan Taylor <email@hidden> wrote:

> This feels like it should be a very basic question, but it's not one I've managed to find an answer to - can somebody here advise?
>
> I have an objective c object which contains a number of properties that serve as parameters for an algorithm. They are bound to UI elements. I would like to take a snapshot copy of the object that will be used for one whole run of the algorithm (rather than risk parameters changing halfway through the run). i.e. I just want to do [myObject copy].
>
> The complication is in ensuring this is threadsafe: ideally I would like to make the copy on a thread other than the main thread. My understanding is that properties themselves, even when designated atomic, are in some way not fully threadsafe, although I haven't found a clear explanation of exactly what makes them unsafe. I don't know if the 'copy' method is threadsafe or not, I am inclined to suspect not.
>
> Is there any way, then, that I can take a copy in a threadsafe manner? If necessary I can do the copy on the main thread, but I would prefer not to have to do that for timing reasons. Any suggestions?
>
> Cheers
> Jonny.
> _______________________________________________
>
> 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


_______________________________________________

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


References: 
 >Threadsafe copy of objective c object (From: Jonathan Taylor <email@hidden>)

  • Prev by Date: Re: Threadsafe copy of objective c object
  • Next by Date: Re: Threadsafe copy of objective c object
  • Previous by thread: Re: Threadsafe copy of objective c object
  • Next by thread: Re: Threadsafe copy of objective c object
  • Index(es):
    • Date
    • Thread