On Dec 7, 2010, at 10:11 AM, Dennis wrote:
> On Dec 6, 2010, at 10:35 PM, Ken Thomases wrote:
>
>> If you step after the line "TileColumn *allColumns[boardDimension - 1]",
>> nothing has happened, yet. That's just a declaration.
>
> But if for example I declare int test[16], the debugger shows the array
> "test" with 16 members. That's not happening in the case of my code with
> allColumns. It's displaying an array of -1 members.
There is a big difference in declaring an array with an integer literal and
declaring one with an integer variable. In the former, the compiler knows at
compile time what is the size of the array. This is not so in the case of the
latter, which means that the debugger also doesn't know the size of the array.
A smarter debugger might be able to know this, but gdb is not a smarter
debugger. This is not a Cocoa thing; it's just part of the C language. In fact,
variable-length arrays weren't even supported in C until relatively recently
(C99?).
>> Finally, something to consider: there's nothing wrong with the technique
>> you've used of populating a C array and then building an NSArray from that C
>> array. However, you might consider creating an NSMutableArray that starts
>> empty and then, during the for loop, each TileColumn is added to it. If you
>> create the NSMutableArray with +arrayWithCapacity: or -initWithCapacity:,
>> you'll even avoid reallocation as you add elements to the array.
>
> I experimented with doing that unsuccessfully.
You should keep experimenting; using Foundation arrays is usually preferable to
using C arrays for most circumstances, unless speed is really important, and
you won't know if that's the case until you start profiling.
Anyway, this should get you going:
gameColumns = [[NSMutableArray alloc] initWithCapacity:boardDimension];
for (.....) {
[gameColumns addObject:[[[TileColumn alloc] init] autorelease];
}
Note the autorelease of the tilecolumn. You need this because NSMutableArrays
will claim ownership of their objects, so you need to relinquish your own
ownership or else you'll have a memory leak.
--
Dave Carrigan
[email protected]
Seattle, WA, USA
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]