我正在開發一款適用於iOS的紙牌遊戲,並且我遇到了我所猜測的Objective-C中的內存管理問題,我可以不知道。我已經多次閱讀了內存管理,並且我認爲我做的都是正確的,但是每當我嘗試從我的卡片類中調出屬性時,我都會崩潰。Obj-C/Cocos2d內存問題,調用屬性時的exc_bad_access
它的工作方式是我有一個叫做甲板的NSMutableArray,它是我在Cocos2d中使用的CCLayer的屬性。我分配和初始化在層的init方法的甲板上,然後調用填寫的卡在甲板上的方法:
int i;
int j;
NSString *suit;
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
suit = @"Hearts";
break;
case 1:
suit = @"Clubs";
break;
case 2:
suit = @"Spades";
break;
case 3:
suit = @"Diamonds";
break;
}
for (j=1; j < 15; j++) {
Card *card = [[Card alloc] init];
card.suit = suit;
card.rank = j;
[card makeName];
[deck addObject:card];
}
}
在信息卡類我有屬性:
這些都是合成的,我甚至試着在卡片的init方法中嘗試分配和啓動它們中的每一個(我認爲我不需要這樣做,但試過了)。
第二個我打電話卡片的屬性,但是:
-(void) showCards: (NSMutableArray *) cards {
for (int i = 0; i < [cards count]; i++) {
Card *card = [cards objectAtIndex:i];
NSLog(@"%@",card.name);
}
}
沒有骰子。 EXC_BAD_ACCESS。我的猜測是,在我完成使用之前,這些卡片會以某種方式釋放,但我已經盡了一切努力使它們保持在我能想到的狀態。有什麼想法嗎?我猜這是一件簡單的事,我誤解了,但我沒有想法。謝謝!
編輯:
類聲明:
@interface Card : NSObject {
//NSString *suit;
//int rank;
//NSString *name;
}
property (nonatomic, retain) NSString *suit;
property (nonatomic, retain) NSString *name;
property (nonatomic) int rank;'
init方法(現在 - 剛剛添加的分配/初始化,看看它是否會工作):由請求添加
-(id) init {
self = [super init];
if (self) {
suit = [NSString new];
rank = 0;
name = [NSString new];
}
return self;
}
這裏的產品名稱:
-(void) makeName {
NSString *rankString;
switch (rank) {
case 1:
rankString = @"One";
break;
case 2:
rankString = @"Two";
break;
case 3:
rankString = @"Three";
break;
case 4:
rankString = @"Four";
break;
case 5:
rankString = @"Five";
break;
case 6:
rankString = @"Six";
break;
case 7:
rankString = @"Seven";
break;
case 8:
rankString = @"Eight";
break;
case 9:
rankString = @"Nine";
break;
case 10:
rankString = @"Ten";
break;
case 11:
rankString = @"Jack";
break;
case 12:
rankString = @"Queen";
break;
case 13:
rankString = @"King";
break;
case 14:
rankString = @"Ace";
break;
}
NSString *cardName = [NSString stringWithFormat:@"%@ of %@", rankString, self.suit];
name = cardName;
}
你可以顯示你的classe聲明和你的init方法嗎? – 2012-03-08 09:49:08
你可以通過激活NSZombie來了解它是否是一個解除分配的實例:如果你的卡片是一個殭屍,你在xcode中有一個Exc_bad_access檢查。 – 2012-03-08 09:50:08
卡只是傳遞給「showCards」方法的數組。在遇到問題的情況下,它只是甲板陣列。 – toucansamurai 2012-03-08 09:59:31