我是新的iPhone开发人员。我正在升级现有的iPhone App。我正在使用核心数据模型来保存数据。 在App中,有15个方框可以添加图像。我正在调用一个独立线程来创建一个单独的进程。在这个过程中,我将图像保存为两个大小。我添加了一个带有图像对象的观察者,最后删除了观察者。
我正在使用此方法添加Observer: -
[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];
}
而dic是词典
我的问题是: 通过相机或手机库拍摄4-5张照片后会发生崩溃。
如果有任何可以指导我摆脱这个问题。
先谢谢
答案 0 :(得分:1)
你正在泄漏内存,可能正因为如此,你的应用程序将崩溃。我认为该应用程序内存耗尽并被杀死。
从
中删除[dic retain]
[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:[dic retain]];
方法调用保留对象。请参阅detachNewThreadSelector:toTarget:withObject:的讨论。
在执行分离线程期间保留对象aTarget和anArgument,然后释放。只要aTarget完成执行aSelector方法,就会退出分离的线程(使用exit类方法)。
你的电话应该是
[NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:dic];