Problems with makeObjectsPerformSelector inside and outside a class?
- by QuakAttak
A friend and I are creating a card game for the iPhone, and in these early days of the project, I'm developing a Deck class and a Card class to keep up with the cards. I'm wanting to test the shuffle method of the Deck class, but I am not able to show the values of the cards in the Deck class instance. The Deck class has a NSArray of Card objects that have a method called displayCard that shows the value and suit using console output(printf or NSLog). In order to show what cards are in a Deck instance all at once, I am using this, [deck makeObjectsPerformSelector:@selector(displayCard)], where deck is the NSArray in the Deck class. Inside of the Deck class, nothing is displayed on the console output. But in a test file, it works just fine. Here's the test file that creates its own NSArray:
#import <Foundation/Foundation.h>
#import "card.h"
int main (int argc, char** argv)
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    Card* two = [[Card alloc] initValue:2 withSuit:'d'];
    Card* three = [[Card alloc] initValue:3 withSuit:'h'];
    Card* four = [[Card alloc] initValue:4 withSuit:'c'];
    NSArray* deck = [NSArray arrayWithObjects:two,three,four,nil];
    //Ok, what if we release the objects in the array before they're used?
    //I don't think this will work...
    [two release];
    [three release];
    [four release];
    //Ok, it works... I wonder how...
    //Hmm... how will this work?
    [deck makeObjectsPerformSelector:@selector(displayCard)];
    //Yay! It works fine!
    [pool release];
    return 0;
}
This worked beautifully, so I created an initializer around this idea, creating 52 card objects one at a time and adding them to the NSArray using deck = [deck arrayByAddingObject:newCard]. Is the real problem with how I'm using makeObjectsPerformSelector or something before/after it?