Objective c 如何释放NSThread是否有任何特定的进程需要释放?
在搜索控制器的代码中,我使用的是NSthread。对于我们在搜索栏中输入的每个字符,一个新线程将在线程启动后立即创建。如何释放这些导致内存泄漏的NSThread 以下是创建我的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
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)
。啊,明白了。这是有道理的。这里有两个你可能感兴趣的相关问题:这里有两个你可能感兴趣的相关问题:和