我对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 的"内存泄漏",很多人都在谈论......如果是这样,有什么办法可以解决问题吗?非常感谢您的帮助!
你的 malloc 代码看起来很糟糕。为什么要获取 int 的地址,然后将其转换为字符指针?那为什么还要将大小的 int 传递给您传递 char * 来设置的相同函数呢?我有一种感觉,你得到了一个EXC_BAD_ACCESS,这是因为你的前几行和readExact 方法。确保获得正确的长度并传递正确的参数。
int picLength;
[self readExact:(char*)(&picLength) bySize:sizeof(int)];
char *picBuffer;
picBuffer = (char *)malloc(picLength);