2011-07-27 209 views
0

我是新iPhone开发者。我正在升级现有的iPhone应用程序。我正在使用核心数据模型来保存数据。 在应用程序中,有15个方框添加图像。我打电话给一个分离的线程做一个单独的过程。在这个过程中,我将图像保存为两种尺寸。我已经添加了观察者与图像对象,并最终删除观察者。尝试添加图像时崩溃应用程序..?

我使用这个方法来添加观察报: -

[projectImage addObserver:self forKeyPath:@"fileName" options:NSKeyValueObservingOptionNew context:nil]; 

而且这种方法制作单独的线程中: -

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:[dic retain]]; 

这里AddImage是方法,如: -

- (void) addImage:(NSDictionary *) dic { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    UIImage *image = [dic objectForKey:@"image"]; 
    projectImage = nil; 
    projectImage = [dic objectForKey:@"managedObject"]; 
    [projectImage importImageData:image]; 
    [projectImage removeObserver:self forKeyPath:@"fileName"]; 
    [pool drain]; 
} 

和词典是词典

我的问题是: 这是通过相机或电话库采取4-5图像后崩溃。

如果有任何可以指导我摆脱这个问题。

由于提前

回答

1

您正在泄漏内存,可能是因为这是你的应用程序会崩溃。我认为该应用程序耗尽内存并被杀死。

除去[dic retain]

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:[dic retain]]; 

该目的是通过该方法调用保留。请参阅detachNewThreadSelector:toTarget:withObject:的讨论。

对象aTarget和anArgument在执行分离的线程期间保留,然后释放。一旦aTarget完成执行aSelector方法,退出分离线程(使用退出类方法)。

您的来电应

[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:dic]; 
+0

感谢fluchtpunkt答复,我这样做,但它不工作,也许有可能它正在发生,由于内存泄漏。 – user864852

+0

你可以给我任何提示,让一个方法同步,以便在其他进程运行后执行...?我怎么称呼它?我想让这种图像保存方法一次执行。 – user864852

相关问题