hi adrian,
thanks for your advice. i also read quite a bit on it, but still i'm not
looking completely through ...
ad 1) i want to keep the values of the dictionary over the whole process ...
now there is just random dummy data but i want to keep the state of the entries
...
ad 2) alright, thats what i thought and expected, but why doesnt it work then
without the retain? thats actually my problem with understanding ...
ad 3) thats also clear so far, but if i retain it and release it afterwards it
should be even and ok ... i thought ...
so my problem is still. why doesnt it work without the retain? it should as far
as i understand the memory management concept ...
thx a lot, stefan
On Sep 28, 2010, at 2:56 PM, Adrian Ward wrote:
>
> This is more of an Cocoa programming discussion than QC, but read up on
> memory management to get a handle on why this is, and what the different
> techniques mean. You will suffer endlessly until you do!
>
>
> The quick answers, if you're feeling lazy, are:
>
> 1. Don't create your dictionary in startExecution unless you really have to,
> you're complicating matters by creating an object and keeping it around.
> Creating a new one on each execute: is fairly lightweight, I doubt that's
> going to contribute much to your CPU load if that's what you're worried about.
>
> 2. [NSMutableDictionary new] is a shorthand for [[NSMutableDictionary alloc]
> init] which also retains the object in a non-GC environment. So no additional
> retain is needed (only a release, later).
>
> Using a convenience constructor like +[NSMutableDictionary dictionary]
> appears to be more complex because it'll give you an autoreleased object
> which could go on to cause a crash, but it makes your code easier to read
> because it's easy to balance a single retain with a single release. Also, if
> you set a property to an autoreleased object, the synthesized setter should
> retain and release it for you, automatically - so you get even simpler code
> and there's no need to retain or release yourself.
>
> 3. Whatever you do, don't continually retain an object on each execute:!
> You're just incrementing the retain counter madly. If your composition was to
> continually stop and start, you'd be leaking memory.
>
>
> A.
>
>
> On 28 Sep 2010, at 12:56, Stefan Kainbacher, NEON GOLDEN wrote:
>
>> cheers adrian, that was it. i changed it to the following ...
>>
>>
>> - (BOOL) startExecution:(id<QCPlugInContext>)context
>> {
>>
>> particles = [NSMutableDictionary new];
>>
>> return YES;
>> }
>>
>>
>> - (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time
>> withArguments:(NSDictionary*)arguments
>> {
>>
>> NSLog(@"Amount: %i", self.inputAmount);
>>
>> //[particles removeAllObjects];
>>
>> for(int i=0;i<self.inputAmount;i++){
>>
>> NSDictionary *dictionary = [NSDictionary
>> dictionaryWithObjectsAndKeys:
>>
>> [NSString stringWithFormat:@"%i", rand()], @"x",
>>
>> [NSString stringWithFormat:@"%i", rand()], @"y",
>>
>> [NSString stringWithFormat:@"%i", rand()], @"z",
>>
>> [NSString stringWithFormat:@"%i", rand()], @"random value",
>> nil];
>> [particles setObject:dictionary forKey:[NSString
>> stringWithFormat:@"%i",i]];
>> }
>>
>> //[self.outputParticles setDictionary:particles];
>>
>> [particles retain];
>> self.outputParticles = particles;
>>
>> return YES;
>> }
>>
>>
>> - (void) stopExecution:(id<QCPlugInContext>)context
>> {
>>
>> [particles release];
>>
>> }
>>
>>
>> why do i have to retain it? is it because of the "particles =
>> [NSMutableDictionary new];"? do i have to release it one more time, or ist
>> correct now?
>>
>>
>>
>> On Sep 28, 2010, at 12:25 PM, Adrian Ward wrote:
>>
>>>
>>> Are you sure you're retaining your particles dictionary so its not being
>>> autoreleased? I can't see where you've created it so cannot be certain.
>>> This sort of mistake often causes these sorts of crashes (works initially,
>>> doesn't shortly after).
>>>
>>> An easier and probably safer approach would be to just set your
>>> outputParticles property directly to a new dictionary that you create each
>>> time, rather than trying to maintain one mutable object over time, and then
>>> having to retain it, etc.
>>>
>>> And finally, to answer your source comment, no they're not the same - the
>>> first one changes the contents of your self.outputParticles dictionary to
>>> match those of particles. The second one assigns (depending on your
>>> @property declaration) the object directly to the property, which is what
>>> you're wanting.
>>>
>>> Try this:
>>>
>>> NSMutableDictionary* particles = [NSMutableDictionary dictionary];
>>>
>>> for(int i=0;i<self.inputAmount;i++){
>>> NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
>>>
>>> [NSString stringWithFormat:@"%i", rand()], @"x",
>>>
>>> [NSString stringWithFormat:@"%i", rand()], @"y",
>>>
>>> [NSString stringWithFormat:@"%i", rand()], @"z",
>>>
>>> [NSString stringWithFormat:@"%i", rand()], @"random value",
>>> nil];
>>> [particles setObject:dictionary forKey:[NSString
>>> stringWithFormat:@"%i",i]];
>>> }
>>> self.outputParticles = particles;
>>>
>>>
>>>
>>>
>>> Best,
>>>
>>> A.
>>>
>>>
>>> On 28 Sep 2010, at 10:57, Stefan Kainbacher, NEON GOLDEN wrote:
>>>
>>>>
>>>> hello together,
>>>>
>>>> i would like to build a plugin that has one input (number) and an output
>>>> (structure).
>>>>
>>>> if i change the the number on the input it should give me a a dictionary
>>>> or array with n=inputNumber elements. it works the first time and hands
>>>> out the structure in qc, but when i change the input qc crashes. whats
>>>> wrong? what do i miss?
>>>>
>>>>
>>>> - (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time
>>>> withArguments:(NSDictionary*)arguments
>>>> {
>>>>
>>>> NSLog(@"Amount: %i", self.inputAmount);
>>>> //[particles removeAllObjects];
>>>>
>>>> for(int i=0;i<self.inputAmount;i++){
>>>>
>>>> NSDictionary *dictionary = [NSDictionary
>>>> dictionaryWithObjectsAndKeys:
>>>>
>>>> [NSString stringWithFormat:@"%i", rand()], @"x",
>>>>
>>>> [NSString stringWithFormat:@"%i", rand()], @"y",
>>>>
>>>> [NSString stringWithFormat:@"%i", rand()], @"z",
>>>>
>>>> [NSString stringWithFormat:@"%i", rand()], @"random value",
>>>> nil];
>>>> [particles setObject:dictionary forKey:[NSString
>>>> stringWithFormat:@"%i",i]];
>>>> }
>>>>
>>>> [self.outputParticles setDictionary:particles]; // BTW: IS THIS THE
>>>> SAME? self.outputParticles = particles;
>>>>
>>>> return YES;
>>>> }
>>>>
>>>>
>>>> full source download (2.5 mb) available here:
>>>>
>>>> http://dl.dropbox.com/u/950822/Quartz%20Composer/NG%20ParticleSystem%2001.zip
>>>>
>>>>
>>>> cheers, stefan
>>>
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Quartzcomposer-dev mailing list ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/quartzcomposer-dev/stefan%40neongolden.net
>>>
>>> This email sent to [email protected]
>>
>> --
>> NEW phone number: 0676 60 33 989
>>
>> --
>> NEON GOLDEN
>> VISUAL EXPERIMENT
>>
>> lab.neongolden.net
>>
>> --
>> www.respectyourvj.net
>>
>>
>>
>>
>>
>
--
NEW phone number: 0676 60 33 989
--
NEON GOLDEN
VISUAL EXPERIMENT
lab.neongolden.net
--
www.respectyourvj.net
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com
This email sent to [email protected]