我从购买的媒体流SDK库中获得了C ++回调,它在内部创建了几个线程。
具体来说,当库想要记录消息时,我会收到回调。有时我在一些NSThread的上下文中调用,其中有一个Autorelease池,但有时我从其他线程调用,没有自动释放池。一些调用线程是实时线程(音频抓取等),因此性能很重要。
如何区分我在NSThread(应用程序的主线程或其他NSThreads)中调用的情况和由SDK库创建的内部“仅C ++”线程?
Apple的文档中没有任何内容告诉我使用
时会发生什么[NSThread currentThread]
当我在另一种线程的上下文中时,当我在NSThread上调用pthreadSelf()或类似的API时会发生什么。
此外,如果可能的话,我想听听有关将自动释放池附加到这些内部线程的想法,以及关于不时耗尽它们的想法。
感谢。
答案 0 :(得分:3)
NSThread
是pthread之上的包装器,因此如果线程是使用pthread_self
,pthread,GCD或C ++线程API创建的,NSThread
将始终返回有效的线程对象!
[NSThread currentThread]
也会返回一个NSThread
对象,即使该帖子未使用NSThread
API创建并使用公共API也无法告诉他们返回的对象只是一个代理或一个"实际的" NSThread
。
您可以使用@autoreleasepool
指令生成轻量级自动释放池。