我對iPhone的開發很陌生。我的目標是一個遠程控制應用程序,它的服務器是TightVNC。但是我遇到了一個問題,這讓我發瘋了......我已經成功連接到服務器(使用套接字),接下來想要至少每隔一秒鐘請求桌面更新。所以這裏是通過「performSelectorInBackground」中的選擇器創建的計時器。計時器的主要任務是爲同胞:NSData&malloc在NSTimer中,在定時器中使用大量內存
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的是通過計算機到計算機的無線網絡連接到PC,所以速度是夠快) :
- (void) setPicInMainThread:(NSData *)data {
[chatController.imageView.image release];
chatController.imageView.image = [UIImage imageWithData:data];
}
在展示第一個桌面更新後,該應用程序會崩潰。我在想,如果我遇到了關於NSTimer和NSData的「內存泄漏」,很多人都在談論......如果是這樣,有什麼辦法可以解決這個問題嗎?非常感謝您的幫助!
我看不到在你的代碼中的計時器或在後臺線程中運行任何東西?也許你現在調用[self performSelectorOnMainThread:@selector(setPicInMainThread :) withObject:picData waitUntilDone:YES]來調試錯誤的版本; 與調用[self setPicInMainThread:picData]沒有區別; – Damien 2011-05-20 12:34:46
你有什麼辦法定義屬性chatController.imageView.image? – Damien 2011-05-20 12:36:22
[chatController.imageView.image發佈];看起來是在一個不尋常的地方。你能解釋一下你希望在這次電話會議中發生什麼? – Damien 2011-05-20 12:36:51