Вот ситуация.Приложение не работает на реальном устройстве
Прибор: ipod Touch 3-го поколения. iOS 4.1 OS X: Lion
Это очень простое приложение, ViewController, на нем есть UIImageView и UIButton. При нажатии кнопки он выполняет некоторые вычисления, генерирует изображение и загружает его в UIImageView. Вообще говоря, когда вы нажимаете кнопку, это будет делать некоторую обработку изображения, работающую в событии click.
Это приложение хорошо работает на тренажере. Когда вы нажмете кнопку, она правильно отобразит изображение в UIImageView. Это стоит около 1 ~ 2 секунды, не так долго.
Я подключаю свой iPod touch к своему MBP и загружаю его с Xcode. Я установил некоторые точки останова в одном цикле for
в моем коде (в событии click). Есть странные вещи.
Этот цикл for
является основным циклом, который выполняет большую часть вычислений. Сначала он остановится в точке разрыва, i - 0 i=0
; Когда я продолжаю приложение, приложение кажется остановленным, вам нужно подождать некоторое время, тогда i станет 4 или 8 или 9, а не правильным номером 1
.
Я подозреваю, что если я положу вычислительную работу в другой поток, а не в поток пользовательского интерфейса. Помогает ли это? На самом деле, нет ничего странного кода в событии click, однако я не могу получить правильные изображения, только черный. Встречается ли кто-либо раньше, или, пожалуйста, предоставьте ваше предложение.
UPDATE
Вот что событие нажатия кнопки делает.
int width=320;
int height=480;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc(height * width * 4);
CGContextRef contextRef = CGBitmapContextCreate(imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
//CGColorSpaceRelease(colorSpace);
CGContextClearRect(contextRef, CGRectMake(0, 0, width, height));
CGContextTranslateCTM(contextRef, 0, height - height);
for(int i=0;i<height;i++)
{
for (int j=0; j<width; j++) {
*((char *)(imageData+i*width*4+j*4))=0;
*((char *)(imageData+i*width*4+j*4+1))=0;
*((char *)(imageData+i*width*4+j*4+2))=0;
*((char *)(imageData+i*width*4+j*4+3))=255;
}
}
int xmin=-2;
int xmax=2;
int ymin=-2;
int ymax=2;
int fre[320 * 480]={0};
CGPoint p=CGPointZero;
float x=arc4random()*1.0/ARC4RANDOM_MAX;
float y=arc4random()*1.0/ARC4RANDOM_MAX;
p.x=x*(xmax-xmin)+xmin;
p.y=y*(ymax-ymin)+ymin;
int MIN_ITERATE=10;
int ite_from_start=0;
DataPoint point;
point.p=p;
point.red=0.0;
point.green=0.0;
point.blue=0.0;
IFSFunctions *ifsfunction=[[IFSFunctions alloc] init];
for (int i=0; i<1000000; i++) {
if(p.x<=160 && p.x >=-160 && p.y <= 240 && p.y >= -240)
{
//fre[((int)p.y+240)*320+(int)p.x+160]++;
point=[ifsfunction caculate:point];
int data_x=(int)(320*(point.p.x-xmin)/(xmax-xmin));
int data_y=(int)(480*(point.p.y-ymin)/(ymax-ymin));
if(data_x >=0 && data_x<320 && data_y >=0 && data_y < 480 && ite_from_start < 20000)
{
ite_from_start++;
if(ite_from_start > MIN_ITERATE)
{
*((char *)(imageData+data_y*width*4+data_x*4))=(int)point.red;
*((char *)(imageData+data_y*width*4+data_x*4+1))=(int)point.green;
*((char *)(imageData+data_y*width*4+data_x*4+2))=(int)point.blue;;
}
fre[data_y*width+data_x]++;
}
else
{
ite_from_start=0;
point=[ifsfunction caculate:point];
}
}
}
int max_int=0;
for (int i=0; i<320*480; i++) {
if (fre[i]>max_int) {
max_int=fre[i];
}
}
//NSLog([NSString stringWithFormat:@"The max interation %f",logf(max_int+1)]);
for (int i=0; i<height; i++) {
for(int j=0;j<width;j++){
float intensity=logf(fre[i*width+j]+1.0)/logf(max_int/300+1);
//NSLog([NSString stringWithFormat:@"The %f",intensity]);
float gamma=powf(intensity, 0.25);
*((char *)(imageData+i*width*4+j*4))=(int)(gamma*(*((char *)(imageData+i*width*4+j*4))));
*((char *)(imageData+i*width*4+j*4+1))=(int)(gamma*(*((char *)(imageData+i*width*4+j*4+1))));
*((char *)(imageData+i*width*4+j*4+2))=(int)(gamma*(*((char *)(imageData+i*width*4+j*4+2))));
}
}
CGDataProviderRef dataProvider=CGDataProviderCreateWithData(NULL, imageData, height * width * 4, NULL);
CGImageRef imageRef=CGImageCreate(width, height, 8, 32, 4*width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, dataProvider, NULL, NO, kCGRenderingIntentDefault);
CGColorSpaceRelease(colorSpace);
CGDataProviderRelease(dataProvider);
CGContextDrawImage(contextRef, CGRectMake(0, 0, width, height), imageRef);
imgView.image=[UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGContextRelease(contextRef);
free(imageData);
С наилучшими пожеланиями,
Пожалуйста, покажите нам код для цикла. Кроме того, если есть сообщение об ошибке, сообщите нам, что говорит об ошибке. – sosborn
Нет сообщения об ошибке, я хочу показать свой код, однако их сложно показать всем –
Тогда мы не можем помочь. Как мы можем узнать, что происходит, если мы не видим код? – sosborn