我想教自己Objective-c。我有很多書,我讀過的所有書都試圖解決我的問題。我用下面的代碼繪製自己的地圖。無法停止內存泄漏
-(void)drawMap
{
for (NSInteger tempY=character.locationY-5;tempY<character.locationY+6;tempY++)
{
for (NSInteger tempX=character.locationX-4;tempX<character.locationX+5;tempX++)
{
MapTile *a = [[MapTile alloc] initWithFrame:CGRectMake
(((tempX-(character.locationX-3)) * 44)+6,
((tempY-(character.locationY-5)) * 44)-12,0,0)
:[map getTilePic:tempY:tempX]];
[self.view addSubview:a];
}
}
CharacterTile *a = [[CharacterTile alloc] initWithFrame:CGRectMake(138,206,0,0)];
[self.view addSubview:a];
}
而且我MapTile看起來像這樣 -
-(id)initWithFrame:(CGRect)frame :(NSInteger)pictureNumber
{
if (!dungeonLoaded)
{
UIImage *tempImage;
for (NSInteger count=0;count<54;count++)
{
NSString *temp = [NSString alloc];
temp = [NSString stringWithFormat:@"%i.png", count];
tempImage = [UIImage imageNamed:temp];
loadedImage[count] = tempImage;
}
dungeonLoaded = YES;
}
CGRect rect = CGRectMake(frame.origin.x,frame.origin.y,
loadedImage[pictureNumber].size.width,
loadedImage[pictureNumber].size.height);
self = [super initWithFrame:rect];
image = [loadedImage[pictureNumber] retain];
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
return self;
}
我的問題是,如果我在地圖一會兒走動,只有這是被稱爲唯一方法,它之後大幅減緩只有十幾個動作。
我原本每次移動時都會加載圖像,認爲這可能是問題,所以改變了它,就像你看到的,只加載一次圖像並重新使用它們。我嘗試使用「開始Iphone遊戲開發」一書中的圖像緩存,並在每個繪圖貼圖方法的開始清空緩存。我嘗試實現autorelease池並使用autorelease標籤加載tile。我嘗試在繪製時重新分配瓦片,但正如您所期望的那樣,這會摧毀屏幕上的圖像,因此地圖不可見。
我不是懶惰的,並試圖讓這個停止放緩,但不幸的是,這是超出我的編碼技能在這個時候。
任何幫助將不勝感激。
在此先感謝。
亞當