我目前正在嘗試編寫一個類來創建人造網格系統,以跟蹤使用NSMutableArray的NSMutableArray的NSMutableArray的遊戲實體。鑑於我在Objective-C編程方面的經驗有限,我不確定某些事情是如何工作的。如何管理NSMutableArrays的NSMutableArray的內存/使用
下面是init方法:
#define MAX_BALL_ROWCOUNT 6
#define MAX_BALL_COLCOUNT 4
- (id) initWithMutableArray:(NSMutableArray *)aList {
self = [super init];
if (self != nil) {
ballList = [[NSMutableArray alloc] initWithCapacity: MAX_BALL_ROWCOUNT];
for (int i=0; i<MAX_BALL_ROWCOUNT; i++) {
NSMutableArray *balls = [[NSMutableArray alloc] initWithCapacity:MAX_BALL_COLCOUNT];
[ballList addObject:balls];
[balls release];
}
int x = 0;
for (NSMutableArray *array in ballList) {
for (int i = 0; i<MAX_BALL_COLCOUNT; i++) {
[array addObject:[aList objectAtIndex:x]];
x++;
}
}
}
return self;
}
ballList是類的NSMutableArray中,將存儲NSMutableArrays。
aList是包含GameEntities的NSMutableArray,我希望跟蹤傳入此類的內容。
要存儲的所有實體大小和數量都是固定的,這就是爲什麼不檢查數組大小和實體數量的原因。
因此,我有第一個問題涉及釋放內存。這是的dealloc函數我目前有:
- (void) dealloc {
[ballList release];
[super dealloc];
}
是否呼籲ballList釋放使釋放被叫做它包含NSMutableArrays(隨後將呼籲這些NSMutableArrays包含的對象的釋放)或做我必須寫這樣的東西:
for (NSMutableArray *array in ballList) {
[array release];
}
[ballList release];
我的第二個問題涉及到使用這個數組的數組。這是遍歷ballList的正確方法嗎?
- (void) update {
for (NSMutableArray *array in ballList) {
for (GameEntity *balls in array) {
(CGPoint) location = [balls getLocation];
[balls setLocation: CGPointMake(location.x+1, location.y+1)];
}
}
}
最後,在上述地方設置球的位置的代碼,它只會影響中ballList內容或不傳遞到ballList原ALIST改變呢?如果原始aList中的內容不改變,我會如何編寫它以便它們執行?
如果人們有更好的方法來跟蹤網格系統中的實體,我也會對這些實體開放。提前致謝。
非常感謝你 – 2011-06-02 07:29:01
@Jeff李,請用投票如果任何回答對你有所幫助,並接受解決您的問題的答案。詳細信息請查看FAQ http://stackoverflow.com/faq。 – taskinoor 2011-06-02 07:31:43
看來在這一點上,他沒有足夠的代表upvote。但他應該接受。 – Kongress 2011-06-09 13:29:28