swarm-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [swarm-hackers] Still learning the framework...


From: Scott Christley
Subject: Re: [swarm-hackers] Still learning the framework...
Date: Mon, 16 Nov 2009 21:08:22 -0800


On Nov 16, 2009, at 7:32 PM, Nima Talebi wrote:

Hi All,

This bit of code about to be presented is merely a proof-of-concept (POC) for myself in learning the framework, and specifically the memory zoning.

What I have here, is an attempt to create a new "HeatbugsWorld", which hides details such as....
 * The fact that it "is-a" Swarm

Why?



 * it conforms to Grid2d

Subclassing is your friend in object-oriented programming.  HeatSpace is already a subclass of Grid2d, actually it is a subclass of Diffuse2d which is a subclass of Grid2d, so maybe you just want to enhance the HeatSpace class?




...and adds a few utility methods, for example...


@class HeatbugsModel;

@protocol HeatbugsWorld
- (HBLength)width;
- (HBLength)height;
- (HBSize)size;
@end

@interface HeatbugsWorld:Swarm <Grid2d> {
    HBSize size;
}

+ (id)createBegin:(id)aZone withModel:(HeatbugsModel *)m andSize:(HBSize)s;
- (HBLength)width;
- (HBLength)height;
- (HBSize)size;

@end


@implementation HeatbugsWorld

+ (id)createBegin:(id)z withModel:(HeatbugsModel *)m andSize:(HBSize)s {
    HeatbugsWorld *this = [Grid2d create:m setSizeX:(int)s.width Y:(int)s.height];
    /*! Now set up the grid used to represent agent position... */
    this->size = s; 
    return self;
}

- (HBLength)width {
    return size.width;
}

- (HBLength)height {
    return size.height;
}

- (HBSize)size {
    return size;
}

@end



...however, that crashes on `[Grid2d create:m setSizeX:(int)s.width Y:(int)s.height];'. The stack & crashlog...

2009-11-17 14:20:40.679 Heatbugs[1157:6807] +[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b0
2009-11-17 14:20:40.680 Heatbugs[1157:6807] An uncaught exception was raised
2009-11-17 14:20:40.680 Heatbugs[1157:6807] +[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b0
2009-11-17 14:20:40.682 Heatbugs[1157:6807] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b0'
*** Call stack at first throw:
(
0   CoreFoundation                      0x95a1358a __raiseError + 410
1   libobjc.A.dylib                     0x93460f49 objc_exception_throw + 56
2   CoreFoundation                      0x95a5fa9b +[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x959bb026 ___forwarding___ + 950
4   CoreFoundation                      0x959babf2 _CF_forwarding_prep_0 + 50
5   Swarm                               0x000826bb +[Grid2d createBegin:] + 59
6   Swarm                               0x00080b3c +[Discrete2d create:setSizeX:Y:] + 55
7   Swarm                               0x0008267a +[Grid2d create:setSizeX:Y:] + 73
8   Heatbugs                            0x00006e57 +[HeatbugsWorld createBegin:withModel:andSize:] + 55
9   Heatbugs                            0x00003cf2 +[HeatbugsModel heatbugModelWithAZone:] + 338
10  Swarm                               0x0001e726 +[CreateDrop_s create:] + 41
11  Heatbugs                            0x00003221 -[HeatbugsGUI buildObjects] + 145
12  Swarm                               0x000860e6 -[OpenStepSwarmController newSimulation:] + 211
13  Foundation                          0x98c90964 -[NSThread main] + 45
14  Foundation                          0x98c90914 __NSThread__main__ + 1499
15  libSystem.B.dylib                   0x94800f39 _pthread_start + 345
16  libSystem.B.dylib                   0x94800dbe thread_start + 34
)



1. Scott - based on what you said regarding zones - quite correctly - even a [HeatbugsWorld alloc] would crash - so I've removed all such methods and functions, but now I need to find a way of encapsulating swarm-framework implementation details from the user-app - mostly just to make sure that I can do it - and that I have a good understanding of how it all works.

Yep, don't do it.  Use the +create methods like everybody else.




2. I'm also a little confused with protocols and classes that share the same name - such as Grid2d - is that how things should be done? Is that good practice - should I be doing it? :)

Don't say an object conforms to a protocol, like Grid2D unless it actually does, and your class doesn't.  If you want to add functionality then you should subclass Grid2D, that's what subclassing is for...



3. Finally, notice that the [Grid2d create:setSizeX:Y:] takes no Zone info, could that be related to my problem?  I did try [[Grid2d createBegin:z] ...] but had no luck there either.

That means it uses the default global zone.  You really don't need to get involved in using zones, just let the framework use the default.



4. Sorry for the unlimited supply of newb-spam.

Nima
_______________________________________________
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers


reply via email to

[Prev in Thread] Current Thread [Next in Thread]