Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何释放NSThread是否有任何特定的进程需要释放?_Objective C_Ios4 - Fatal编程技术网

Objective c 如何释放NSThread是否有任何特定的进程需要释放?

Objective c 如何释放NSThread是否有任何特定的进程需要释放?,objective-c,ios4,Objective C,Ios4,在搜索控制器的代码中,我使用的是NSthread。对于我们在搜索栏中输入的每个字符,一个新线程将在线程启动后立即创建。如何释放这些导致内存泄漏的NSThread 以下是创建我的NSThread的位置: if (searchString.length > 1) { self.searchThread = [[[NSThread alloc] initWithTarget:self selector:@selector(filterContentForSearchTextInBackg

在搜索控制器的代码中,我使用的是NSthread。对于我们在搜索栏中输入的每个字符,一个新线程将在线程启动后立即创建。如何释放这些导致内存泄漏的NSThread

以下是创建我的NSThread的位置:

if (searchString.length > 1) {
    self.searchThread = [[[NSThread alloc] initWithTarget:self selector:@selector(filterContentForSearchTextInBackgroundThread:) object:searchString] autorelease];
    [self.searchThread start];

}

回答:
self.searchThread=nil将在执行完成后释放线程

更长的回答;你真的不想每次击键都产生一个线程。如果您打算使用线程,那么您应该有一个线程来处理击键,并且您应该在击键发生时告诉该线程有关击键的情况


这意味着您可能还需要某种“取消当前查询并启动新查询”机制将在执行完成后释放线程

更长的回答;你真的不想每次击键都产生一个线程。如果您打算使用线程,那么您应该有一个线程来处理击键,并且您应该在击键发生时告诉该线程有关击键的情况


这意味着您可能还需要某种“取消当前查询并启动新查询”机制。

似乎设置
self.searchThread=nil
是一种毫无意义的姿态,除非启用了垃圾收集。线程已被自动释放;这应该足够了。你不能平衡保留一个属性和自动释放对象的创建;这将导致非常糟糕的事情(如所写,OP的代码是+1rc(alloc),-1rc(delayed),+1rc(assignment)因此,是的,除非启用ARC,否则您需要将属性设置为nil或直接释放ivar以平衡分配时的保留。Objective-C中的分配操作不会修改引用计数。查看代码,我看到+1 RC(alloc)和-1 RC(自动释放延迟)。我假设
searchThread
被定义为
@属性(retain)
。啊,明白了。这很有道理。除非启用垃圾收集,否则设置
self.searchThread=nil
似乎是一个毫无意义的动作。线程已经自动释放了;这应该足够了。您无法平衡保留属性和自动释放对象创建;这将导致非常糟糕的事情(如前所述,OP的代码为+1 RC(alloc),-1 RC(delayed),+1 RC(assignment)。因此,是的,除非启用ARC,否则您需要将属性设置为nil或直接释放ivar以平衡保留分配。Objective-C中的分配操作不会修改引用计数。查看代码,我看到+1 RC(alloc)和-1 RC(被自动释放延迟)。我假设
searchThread
被定义为
@property(retain)
。啊,明白了。这是有道理的。这里有两个你可能感兴趣的相关问题:这里有两个你可能感兴趣的相关问题:和