是否可以安全地分配NSThread然后多次initWithTarget线程?

时间:2011-11-17 03:48:55

标签: objective-c memory-leaks nsthread nsautoreleasepool

我有一个Quartz Composer的自定义补丁,它是一个多播接收器。它会为守护程序激活NSThread,然后在用户更改多播地址或端口号时重新启动它。

当补丁启动时,我会执行以下操作来启动新线程。

daemonThread = [NSThread alloc];

然后,每次启动或重新启动线程时,我都会重新初始化它:

[daemonThread initWithTarget:multicastDaemon selector:@selector(doWorkWithDelegate:) object:self];
[daemonThread start];

当然,我每次重启之前都会终止该线程。我没有使用垃圾收集,并且当补丁退出时我会释放daemonThread。

我担心的是,我不确定当我一遍又一遍地重新初始化这个线程时会发生什么。我注意到Instruments告诉我我正在泄漏一个NSThread和一个自动释放池,我怀疑它可能是来自守护程序线程的池。我可以看到每次重新启动过程时这些数字都会增加,但我对仪器不太熟悉,不知道它告诉我的是什么。

我应该担心吗?

1 个答案:

答案 0 :(得分:3)

对已经初始化的任何对象调用任何init...方法是不安全的。这包括NSThread。