【发布时间】:2012-01-31 03:59:37
【问题描述】:
我一直在做 iOS 项目,它在后台使用数据下载。好吧,老实说 - 实现不是最好的(后来被更改以删除这种不明显的模式),而且我在未释放对象方面遇到了一些问题,并且不能说,文档给了我一个清晰的理解发生了什么。代码,展示共同思想:
- (void)loadModelAtIndex:(NSUInteger)index {
Model *model = [self modelAtIndex:index];
if (model) {
model.index = index;
[self performSelectorInBackgroundThread:@selector(loadModelInBackgroundThread) withObject:model]
}
}
- (void)loadModelInBackgroundThread:(Model *)model {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
model.data = [NSData dataWithContentsOfURL:model.url];
//and some other changes can be here
[self performSelectorOnMainThread:@selector(modelDidLoad) withObject:model waitUntilDone:NO]'
[pool drain];
}
- (void)modelDidLoad:(Model *)model {
[self saveModel:model atIndex:model.index];
[self loadModelAtIndex:model.index + 1];
}
嗯,几乎所有时间它都按预期工作。除非调用者在后台下载时被释放 - 模型对象留在内存中,没有被释放(此时我的内存正在增长)。
谁能解释一下,在后台线程运行时释放的情况会发生什么?我不确定这段代码是否合适,但仍然感兴趣。任何修改都会让事情运行良好?
【问题讨论】:
标签: objective-c ios multithreading dealloc