Мы с другом создаем карточную игру для iPhone, и в эти первые дни проекта я разрабатываю класс Deck и класс Card, чтобы не отставать от карт. Я хочу протестировать метод shuffle класса Deck, но я не могу показать значения карт в экземпляре класса Deck. Класс Deck имеет объекты NSArray of Card, которые имеют метод displayCard, который показывает значение и соответствие с использованием вывода консоли (printf или NSLog). Чтобы показать, какие карты находятся в экземпляре колоды, я использую это, [deck makeObjectsPerformSelector:@selector(displayCard)]
, где колода - это NSArray в классе колоды. Внутри класса Deck на выводе консоли ничего не отображается. Но в тестовом файле это работает просто отлично. Вот тестовый файл, который создает свой собственный 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;
}
Это прекрасно работает, поэтому я создал инициализатор для этой идеи, создавая 52 объекта карты по одному и добавляя их в NSArray, используя deck = [deck arrayByAddingObject:newCard]
. Это реальная проблема с тем, как я использую makeObjectsPerformSelector или что-то до / после него?