【发布时间】:2009-08-04 02:37:10
【问题描述】:
我有以下由调用新线程(使用 NSThread)产生的方法:
- (void) updateFMLs {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *temp = [[NSArray alloc] initWithArray:someArrayFromAnotherProcess];
[self performSelectorOnMainThread:@selector(doneLoading:) withObject:temp waitUntilDone:NO];
[pool release];
}
我的doneLoading: 方法如下所示:
- (void) doneLoading:(NSArray *)obj {
myArray = [[NSArray alloc] initWithArray:obj copyItems:NO];
}
myArray 的内容无效。如何保留myArray 的内容,以便以后在我的应用中使用它们?
附: myArray在类头文件中定义。
【问题讨论】:
-
“失效”是什么意思。它们是否正在被释放?
-
顺便说一句,您正在泄漏“temp”数组。你分配了一个数组(+1 保留计数),但你永远不会释放它。
-
是的,它们似乎在我通过 doneLoading 的过程中被解除分配......即使在 doneLoading 中没有任何内容,除了上面显示的行,以任何方式改变 myArray
-
用线程相关的标签重新标记,并删除了不太相关的 iPhone 标签。
标签: objective-c cocoa multithreading memory-management thread-safety