好的,我有一个看似非常简单的情况,但无法理解。
在我的viewDidLoad中,我有:
-(void)viewDidLoad
{
[super viewDidLoad];
WestiesModel *model = [WestiesModel new];
[model FetchServerData];
} // I know, I'll move the model creation out of the view controller later
我的WestiesModel.h是
@interface WestiesModel : NSObject
{
NSURL *ServerURL;
NSMutableArray *Westies;
}
@property (retain) NSURL *ServerURL;
-(void) FetchServerData;
@end
在WestiesModel.m,我有
-(void)FetchServerData
{
[self performSelectorInBackground:@selector(backgroundFetchServerData) withObject:nil];
}
-(void)backgroundFetchServerData
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"%@ %d",Westies,[self retainCount]);
[Westies addObject:@"test"];
NSLog(@"%@ %d",Westies,[self retainCount]);
[Westies addObject:@"test"];
NSLog(@"%@ %d",Westies,[self retainCount]);
[Westies addObject:@"test"];
NSLog(@"%@ %d",Westies,[self retainCount]);
[Westies addObject:@"test"];
.
.
.
[pool release];
}
我在backgroundFetchServerData函数中的随机点获得EXC_BAD_ACCESS。它就像模型对象一样,但我只是在viewDidLoad函数中泄漏它。我没有过滤掉这个屏幕或任何东西。我在iOS5测试版上,在模拟器上运行。
这里有什么想法吗?
答案 0 :(得分:1)
我在随机点获得了EXC_BAD_ACCESS backgroundFetchServerData函数。就像模型对象一样 离开,但我只是在我的viewDidLoad函数中泄漏它。我不 从这个屏幕或任何东西过渡。我正在运行iOS5测试版 在模拟器上。
iOS5测试版属于NDA;不能在这里讨论具体细节。但是,没有必要。
如果在同时执行某些操作时随机崩溃,那是因为您几乎不会正确地执行并发操作。
在这种情况下,您可能没有保留线程中使用的所有对象(在生成线程之前)并且主线程的自动释放池已经耗尽,导致看似随机的时间点崩溃
没有看到更多代码,不可能说。但是,还有几点:
请勿调用 retainCount ,因为它没用。
方法应以小写字母开头
如果“model”是指“核心数据模型”,那么您需要阅读Core Data并发指南,因为随机分离线程将无法正常工作。看起来你没有使用CD,所以不用担心那部分。
实例变量应以小写字母
这看起来像是线程问题或内存管理问题(或两者)。