NSData& malloc在NSTimer中,在计时器中使用了大量内存

时间:2011-05-20 12:06:57

标签: iphone objective-c

我对iPhone开发很新。我的目标是一个远程控制应用程序,其服务器是TightVNC。但是我遇到了一个问题而且它让我发疯了...我已经成功连接到服务器(使用套接字),接下来想要至少每一秒请求一次桌面更新。所以这里是通过“performSelectorInBackground”中的选择器创建的计时器。计时器的主要任务是:

int picLength;
[self readExact:(char*)(&picLength) bySize:sizeof(int)];
char *picBuffer;
picBuffer = (char *)malloc(picLength);
[self readExact:picBuffer bySize:picLength];
NSData *picData = [[NSData alloc]initWithBytes:picBuffer length:picLength];
[self performSelectorOnMainThread:@selector(setPicInMainThread:) withObject:picData  waitUntilDone:YES];
[picData release];
free(picBuffer);

“setPicInMainThread”如下(每张图片大约200KB,iTouch通过电脑到电脑wifi连接到PC,所以速度足够快):

- (void) setPicInMainThread:(NSData *)data {
    [chatController.imageView.image release];
    chatController.imageView.image = [UIImage imageWithData:data];
}

应用程序在呈现第一个桌面更新后崩溃。我想知道我是否遇到了有关NSTimer和NSData的“内存泄漏”,很多人都在谈论......如果是这样,有什么方法可以解决这个问题吗?非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你的malloc代码看起来很糟糕。为什么要获取int的地址然后将其转换为字符指针?那么为什么甚至会将大小的int传递给你传递char *来设置相同的函数?我有一种感觉,你得到一个EXC_BAD_ACCESS,这是因为你的前几行和readExact方法。确保你得到正确的长度并传递正确的参数。

int picLength;
[self readExact:(char*)(&picLength) bySize:sizeof(int)];
char *picBuffer;
picBuffer = (char *)malloc(picLength);