gpt4 book ai didi

objective-c - 保留在 NSThread 中创建的对象

转载 作者:行者123 更新时间:2023-12-03 17:18:08 26 4
gpt4 key购买 nike

我有以下方法,它是通过调用新线程(使用 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 在类头文件中定义。

最佳答案

如果您的后台线程做了一些工作并且需要将 NSArray“传递”到您的主线程,那么所有 didLoading 需要做的是:

-(void)doneLoading:(NSArray *)obj
{
[myArray release]; // release the previous array and its objects
myArray = [obj retain];
// now use myArray, refresh tables, etc.
}

(可能)不需要创建数组的另一个副本,这可能是根本问题。您还应该在 performSelector 调用之后调用 [temp release],因为其参数已被保留。

如果myArray 的内容以某种方式变得有效,那么它们就会在某个地方双重释放。 myArray 将保留添加到其中的任何对象。您提到 myArray 本身正在变得无效,因此请尝试使用此模式重写您的后台线程和 didLoading 方法。

最后,您应该使用[pool排出]代替[poolrelease]

关于objective-c - 保留在 NSThread 中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com