我有一个Quartz Composer的自定义补丁,它是一个多播接收器。它会为守护程序激活NSThread,然后在用户更改多播地址或端口号时重新启动它。
当补丁启动时,我会执行以下操作来启动新线程。
daemonThread = [NSThread alloc];
然后,每次启动或重新启动线程时,我都会重新初始化它:
[daemonThread initWithTarget:multicastDaemon selector:@selector(doWorkWithDelegate:) object:self];
[daemonThread start];
当然,我每次重启之前都会终止该线程。我没有使用垃圾收集,并且当补丁退出时我会释放daemonThread。
我担心的是,我不确定当我一遍又一遍地重新初始化这个线程时会发生什么。我注意到Instruments告诉我我正在泄漏一个NSThread和一个自动释放池,我怀疑它可能是来自守护程序线程的池。我可以看到每次重新启动过程时这些数字都会增加,但我对仪器不太熟悉,不知道它告诉我的是什么。
我应该担心吗?
答案 0 :(得分:3)
对已经初始化的任何对象调用任何init...
方法是不安全的。这包括NSThread。